Wie passe ich die X-Achse (nach meinem Wunsch) an?

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
SebastianL
Beiträge: 7
Registriert: Sa Dez 28, 2019 5:16 pm

Wie passe ich die X-Achse (nach meinem Wunsch) an?

Beitrag von SebastianL »

Hallo liebes Forum,

vor einiger Zeit hatte ich noch eine Tabelle mit wenigen Einträgen. Nun ist die Anzahl der Datensätze gestiegen und ich brauche eine Anpassung der X-Achse.

Denn sie wird nicht mehr richtig angezeigt.

Wünsche zur Anpassung der X-Achse:
[*]X-Achse soll über die gesamte Zeit gehen (von Anfang bis Ende)
[*]das Anfangs- und das Enddatum sollen sichtbar sein
[*]und wenn möglich soll zu jedem 1. des Monats ein Datum angezeigt werden

Und wie bekomme ich eine separate Legende angezeigt?

Hier ist der Code, den ich verwende:

Code: Alles auswählen

peakflow <- read.table("peakflow.txt", sep = ";", header = TRUE)

str(peakflow)

peakflow$Datum <- as.Date(peakflow$Datum, format = "%d.%m.%Y")

peakflow$m.peakflow <- peakflow$morgens[length(peakflow$morgens):1]

peakflow$a.peakflow <- peakflow$abends[length(peakflow$abends):1]

peakflow$d.peakflow <- peakflow$Datum[length(peakflow$Datum):1]

plot(peakflow$Datum, peakflow$m.peakflow, type = "n", axes = FALSE, ylim = c(min(c(peakflow$m.peakflow, peakflow$a.peakflow) -10), max(c(peakflow$m.peakflow, peakflow$a.peakflow))), xlab = "Datum", ylab = "morgens = blau, abends = rot")

axis(side = 1, at = as.numeric(peakflow$Datum[nrow(peakflow) - c(0:2) * 7]), labels = format(peakflow$Datum[nrow(peakflow) - c(0:2) *7], "%d.%m.%Y"))

axis(side = 2, at = seq(from = min(c(peakflow$m.peakflow, peakflow$a.peakflow)) - 10, to = max(c(peakflow$m.peakflow, peakflow$a.peakflow)), by = 10))

lines(peakflow$d.peakflow, peakflow$m.peakflow, type = "l", col = "blue")
lines(peakflow$d.peakflow, peakflow$a.peakflow, type = "l", col = "red")
Vielen Dank im Voraus für die Antworten!
Beste Grüße
Sebastian
Dateianhänge
Wert 7.jpeg
Peakflow.txt
(9.98 KiB) 86-mal heruntergeladen
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Wie passe ich die X-Achse (nach meinem Wunsch) an?

Beitrag von bigben »

Hallo,

zunächst einmal ist es nicht klug, plot mit "axes = 'n'" aufzurufen, weil damit die x-Achse auf Zahlen statt auf Datumsformate ausgelegt wird. In einem ersten Schritt würde ich Deinen plot und Deine axis Aufrufe durch beispielsweise folgenden plot-Aufruf ersetzen:

Code: Alles auswählen

plot(peakflow$Datum, peakflow$m.peakflow, ylim = c(min(c(peakflow$m.peakflow, peakflow$a.peakflow) -10), 
     max(c(peakflow$m.peakflow, peakflow$a.peakflow))), xlab = "Datum", ylab = "peak flow", col = "white")
Die Anfangs-, End- und Monatsschritte muss man noch mit axis ergänzen

Zur Legende könnte ein Anfang so aussehen. aufzurufen nach plot:

Code: Alles auswählen

legend("topright", fill = c("blue", "red"), legend = c("morgens", "abends"), inset = .02)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
SebastianL
Beiträge: 7
Registriert: Sa Dez 28, 2019 5:16 pm

Re: Wie passe ich die X-Achse (nach meinem Wunsch) an?

Beitrag von SebastianL »

Hallo,

vielen Dank für die Antwort. Genauso habe ich es mir vorgestellt.

Ich brauche jetzt nur noch eine Hilfe bei der Syntax von axis:

Code: Alles auswählen

axis(side =1, at = as.Date("01.03.2020", "%d.%m.%Y", labels = format("01.03.2020", "%d.%m.%Y")))
Wenn ich es so eingebe, dann bekomme ich einen Zahlenwert, aber kein Datum.

Könnte mir jemand da noch helfen?

Vielen Dank im Voraus!
Beste Grüße
Sebastian
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Wie passe ich die X-Achse (nach meinem Wunsch) an?

Beitrag von bigben »

Vielleicht so?

Code: Alles auswählen

peakflow <- read.table("http://forum.r-statistik.de/download/file.php?id=1459", sep = ";", header = TRUE)

peakflow$Datum <- as.Date(peakflow$Datum, format = "%d.%m.%Y")
peakflow$m.peakflow <- peakflow$morgens[length(peakflow$morgens):1]
peakflow$a.peakflow <- peakflow$abends[length(peakflow$abends):1]
peakflow$d.peakflow <- peakflow$Datum[length(peakflow$Datum):1]
str(peakflow)

par(mar= c(6, 4, 1, 1))
plot(peakflow$Datum, peakflow$m.peakflow, ylim = c(min(c(peakflow$m.peakflow, peakflow$a.peakflow) -10), 
                                                   max(c(peakflow$m.peakflow, peakflow$a.peakflow))), 
     xlab = "Datum", ylab = "peak flow", col = "white", las = 2)
lines(peakflow$d.peakflow, peakflow$m.peakflow, type = "l", col = "blue")
lines(peakflow$d.peakflow, peakflow$a.peakflow, type = "l", col = "red")

axis(side = 1, at = as.Date("01.01.2020", "%d.%m.%Y"), label = "01.01.2020", las = 2)

daten <- c("01.01.2020","01.04.2020","01.07.2020","01.10.2020","01.01.2021","01.01.2021",
           "01.04.2021")
axis(side = 1, at = as.Date(daten, "%d.%m.%Y"), label = daten, las = 2)
abline(v = as.Date(daten, "%d.%m.%Y"), col = "grey", lty = 3)

legend("bottomright", fill = c("blue", "red"), legend = c("morgens", "abends"), inset = .02)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
SebastianL
Beiträge: 7
Registriert: Sa Dez 28, 2019 5:16 pm

Re: Wie passe ich die X-Achse (nach meinem Wunsch) an?

Beitrag von SebastianL »

Hallo,

das ist genauso wie ich es mir vorgestellt habe! Vielen Dank!

Beste Grüße
Sebastian
Antworten