x-Achse im Plot passend stauchen

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

mathrac

x-Achse im Plot passend stauchen

Beitrag von mathrac »

Hallo ihr Lieben, es geht um das folgende Problem:

Ich habe eine Stichprobe mit Patienten, von denen Blutproben genommen wurden. In den Blutproben wurde ein bestimmtes Medikament überprüft. Um dabei ein Vergleich zu erhalten wurde in einem größeren Zeitintervall Blut abgenommen und gemessen.
Jetzt will ich diese Daten als einen fallenden Graph darstellen. Dazu habe ich die Konzentration gegen die Zeit aufgetragen. Das ging auch ganz gut, nur bringt mir dann die Ansicht rein gar nichts, weil die Zeitabstände zwischen den Messungen so groß sind, dass ich nur senkrechte Striche erhalte.

Das möchte ich gerne verbessern, dazu habe ich die Funktion gap.plot() folgendermaßen verwendet:

gap.plot(konzentration$zeitpunkt, konzentration$wert, main="Medikament",
type = "n", xlab = "Zeit", ylab = "Konzentration", gap.axis = "x", gap=c(2.014062e+11,2.014075e+11))

dann kommt der Plot heraus, s. Anhang. Das Problem dabei ist, dass dabei die Zeitachse nicht wirklich gestaucht wird und zum anderen sind da diese 2 Ränder mitten im Plot die ich nicht weg bekomme.

Hat jemand eine Idee wie man das besser lösen kann? Kann man sowas in eine Schleife bauen, so das R selbständig die x-Achse staucht?

Über eure Hilfe würde ich mich sehr freuen!

LG
Dateianhänge
Rplot04.png
Rplot04.png (5.12 KiB) 2020 mal betrachtet
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: x-Achse im Plot passend stauchen

Beitrag von bigben »

mathrac hat geschrieben: Mi Mär 14, 2018 2:44 pmDazu habe ich die Konzentration gegen die Zeit aufgetragen. Das ging auch ganz gut, nur bringt mir dann die Ansicht rein gar nichts, weil die Zeitabstände zwischen den Messungen so groß sind, dass ich nur senkrechte Striche erhalte
Hallo mathrac,

ich kann leider nicht behaupten, dass ich das Problem verstanden hätte. Hast Du mal ein paar Beispieldaten und eine klarere Beschreibung des Problems, das Du lösen willst? Große Abstände auf der x-Achse führen doch nicht per se zu senkrechten Strichen?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: x-Achse im Plot passend stauchen

Beitrag von EDi »

Ich verstehe es auch nicht.
Wenn der Abbau aber sehr schnell und das Treatment zu unterschiedlichen Zeiten stattfand, könnte man auch Days since treatment auf der x-achse darstellen.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
dvf
Beiträge: 24
Registriert: Mo Feb 27, 2017 12:44 pm

Re: x-Achse im Plot passend stauchen

Beitrag von dvf »

Die zwei Ränder mitten im Plot sind der gap-Funktion geschuldet, die einen Teil der x-Achse aus der Darstellung rausschneidet. Wenn du das nicht willst, dann verzichte darauf. Du musst aber wissen, was du eigentlich willst.
Ein Problem habe ich mit der Darstellung der Zeit in vermutlich Sekunden. Ich würde die Einteilung in Tagen oder Stunden vorziehen.
Vielleicht bietet sich für den Abbau von Medikamenten im Körper eine logarithmische Zeiteinteilung eher an?
Zeige bitte deine Darstellung mit den senkrechten Strichen. Lasse mal alle Vorgaben für die Achsen weg.
Ansonsten gilt die Forderung nach einem reproduzierbaren Beispiel.

Gruß
dvf
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: x-Achse im Plot passend stauchen

Beitrag von EDi »

Vielleicht bietet sich für den Abbau von Medikamenten im Körper eine logarithmische Zeiteinteilung eher an?
Hatte ich auch kurz drüber nachgedacht, aber log von absoluter Zeit macht wenig Sinn?Oder sieht komisch aus?

Log von Zeit seit Medikation eher, oder?
Einfach mal ausprobieren...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
mathrac

Re: x-Achse im Plot passend stauchen

Beitrag von mathrac »

Guten Morgen,
bigben hat geschrieben: Mi Mär 14, 2018 4:18 pm
mathrac hat geschrieben: Mi Mär 14, 2018 2:44 pmDazu habe ich die Konzentration gegen die Zeit aufgetragen. Das ging auch ganz gut, nur bringt mir dann die Ansicht rein gar nichts, weil die Zeitabstände zwischen den Messungen so groß sind, dass ich nur senkrechte Striche erhalte
Hallo mathrac,

ich kann leider nicht behaupten, dass ich das Problem verstanden hätte. Hast Du mal ein paar Beispieldaten und eine klarere Beschreibung des Problems, das Du lösen willst? Große Abstände auf der x-Achse führen doch nicht per se zu senkrechten Strichen?

LG,
Bernhard
Also im Grunde ist es wie ich es beschrieben habe. Ich habe Patienten 1, 2, 3 und 4, von allen vier Patienten wird am Montag und Dienstag, in der ersten Woche des Märzes Blut abgenommen, dann wird 2 Monate gewartet bis zwei weitere Blutprobe abgenommen werden und dann nochmal 3 Monate gewartet bis weitere zwei Blutprobe abgenommen werden. Wenn ich jetzt die Messergebnisse als Diagramm in der Form Zeit gegen Wert auftragen will, erhalte ich fast nur senkrechte Verläufe/Graphen, da die Zeitspanne die aufgetragen wird viel zu groß ist. Es wird nämlich nur die komplette Zeitspanne ab der ersten bis zur letzten Abnahme dafür verwendet, das ist mein Problem! Ja, per se nicht, aber durch eine zu große Zeitspanne schon, deshalb ist es mein Ziel die Zeitspanne zu spalten, die Frage ist nur wie?
EDi hat geschrieben: Mi Mär 14, 2018 5:17 pm Ich verstehe es auch nicht.
Wenn der Abbau aber sehr schnell und das Treatment zu unterschiedlichen Zeiten stattfand, könnte man auch Days since treatment auf der x-achse darstellen.
Was ist denn das und wie verwende ich das?
dvf hat geschrieben: Fr Mär 16, 2018 9:22 am Die zwei Ränder mitten im Plot sind der gap-Funktion geschuldet, die einen Teil der x-Achse aus der Darstellung rausschneidet. Wenn du das nicht willst, dann verzichte darauf. Du musst aber wissen, was du eigentlich willst.
Ein Problem habe ich mit der Darstellung der Zeit in vermutlich Sekunden. Ich würde die Einteilung in Tagen oder Stunden vorziehen.
Vielleicht bietet sich für den Abbau von Medikamenten im Körper eine logarithmische Zeiteinteilung eher an?
Zeige bitte deine Darstellung mit den senkrechten Strichen. Lasse mal alle Vorgaben für die Achsen weg.
Ansonsten gilt die Forderung nach einem reproduzierbaren Beispiel.

Gruß
dvf
Ja, das ist ja meine Frage, ich will einen Plot, der mir so anschaulich wie möglich den Verlauf der Konzentration des Medikamentes der Patienten wiederspiegelt.
Ich habe mal probiert die Linien in der Mitte mit abline() zu entfernen, aber das gelang mir nicht.
Mit log habe ich das nicht richtig hin bekommen, da die Anzahl der Proben in meinem reellen Problem teilweise extrem variiert.

Ich hänge hier in den Anhang mal ein Beispiel, was ich unter den "senkrechten Strichen" meine.
Dateianhänge
Rplot.jpg
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: x-Achse im Plot passend stauchen

Beitrag von Athomas »

Ich habe mir nicht den ganzen Thread durchgelesen, aber Dein (Haupt-) Problem scheint ja zu sein, dass die für Dich interessanten Zeiträume nur einen kleinen Bruchteil des Gesamtzeitraums ausmachen - und deshalb überwiegend Uninteressantes in Deinen Grafiken ist!?

Ich würde die "interessanten Phasen" markieren und nur diese dann (als "facets" mit ggplot2) plotten...
Wenn Du die Daten zeigen würdest, könnte man sicherlich mehr sagen/machen!
mathrac

Re: x-Achse im Plot passend stauchen

Beitrag von mathrac »

Ja genau, das ist mein Problem. Hast du eine Idee wie man diesen interessanten Bereich filtern kann?

Nein, die Daten kann ich hier nicht zeigen.

Wie würde es denn allgemein gehen?
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: x-Achse im Plot passend stauchen

Beitrag von Athomas »

Nein, die Daten kann ich hier nicht zeigen.
Es müssen ja nicht die Originaldaten sein, Du könntest sie (linear) transformieren, mit Störungen versehen, ...
So wie es jetzt aussieht, müsste sich ein Antwortgeber "vermutlich passende" Daten zusammensimulieren - und der Aufwand dafür ist häufig genauso groß wie für die Lösung selbst :( !
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: x-Achse im Plot passend stauchen

Beitrag von Athomas »

Ich hab jetzt mal was gefrickelt, was halbwegs auf Deine Situation übertragbar sein sollte.
Guck es Dir mal an, vielleicht hilft es ja!
In der ersten Hälfte geht es praktisch ausschließlich um die Konstruktion von Beispielsdaten.

Code: Alles auswählen

Schwellenwert_Event  <- 100
Schwellenwert_vorbei <- 0.1

Start <- as.POSIXct("2014-01-01 00:00:00", format = "%Y-%m-%d %H:%M:%S")
Ende  <- as.POSIXct("2016-12-31 23:59:59", format = "%Y-%m-%d %H:%M:%S")

DF <- data.frame(Zeitpunkt=seq(Start, Ende, by="30 min"), Messwert=0, Indikator=0)
DF$Messwert[c(10256,16452, 33468, 38888, 47112)] <- c(500,400,600,300,450)
DF$Abnahme <- runif(nrow(DF), min=0.90, max=0.95)

for (i in 2:nrow(DF)) {
  DF$Messwert[i] <- (DF$Messwert[i] + DF$Messwert[i-1]*DF$Abnahme[i-1])
  if(DF$Messwert[i] < Schwellenwert_vorbei & DF$Messwert[i-1] < Schwellenwert_vorbei) DF$Messwert[i] <- 0
  if(DF$Messwert[i] > Schwellenwert_Event & DF$Messwert[i-1] < Schwellenwert_vorbei) DF$Indikator[i] <- 1}

DF$Event <- as.factor(cumsum(DF$Indikator) * (DF$Messwert > 0))

library(ggplot2)
library(scales)

Naiv <- ggplot(DF) +
          theme_bw() +
          geom_point(aes(Zeitpunkt, Messwert))
Naiv

etwas.weniger.naiv <- ggplot(DF[DF$Event!="0", ]) +
  theme_bw() +
  geom_point(aes(Zeitpunkt, Messwert, colour=Event)) +
  facet_grid(  ~ Event, scales="free_x") +
  scale_x_datetime(date_breaks = "6 hour",labels = date_format("%d.%m.%Y %H:%M")) +
  theme(axis.text.x  = element_text(angle=90))
etwas.weniger.naiv
Antworten