Seite 1 von 1

Grafik mit Punkten für 4Quartal

Verfasst: Di Okt 01, 2019 4:44 pm
von patite
Hallo
Der Datensatz ausbeer ist in der Bibliothek fpp2
beer <- window(ausbeer, start = 1992)
plot(beer)
Die Grafik ist im Anhang
ich möchte , dass die Werte für 4Quartal rot hervorgehoben werden, und alle Jahre auf der X-Achse ersichtlich sind.
Wie geht es das?
Vielen Dank
Patite

Re: Grafik mit Punkten für 4Quartal

Verfasst: Di Okt 01, 2019 11:06 pm
von EDi
Darf es ggplot2 sein?

Code: Alles auswählen

library("fpp2")
library("ggplot2")
beer <- window(ausbeer, start = 1992)

df <- fortify(beer)
ggplot(data = df, aes(x = x, y = y, color = x %% 1 %in% c(0.75, 0.00))) +
  geom_line(aes(group = 1)) +
  scale_x_continuous(breaks = seq(min(df$x), max(df$x))) +
  theme(axis.text.x = element_text(angle = -90, vjust = 0.5)) 

Re: Grafik mit Punkten für 4Quartal

Verfasst: Mi Okt 02, 2019 4:09 pm
von Hufeisen
Ach jetzt habe ich es in base R gemacht und EDi war schneller. Du musst mal gucken, ob der Versatz im letzten plot korrekt ist bzw. optisch deinen Anforderungen entspricht. Ich habe alles schrittweise gemacht, damit Du alles nachvollziehen kannst.

Code: Alles auswählen

# Paket installieren und laden
install.packages("fpp2")
library(fpp2)

# Daten einlesen
str(beer) # beer ist der Name eines mitgelieferten Datensatzes
str(ausbeer)
aus_beer <- window(ausbeer, start = 1992) # es empfiehlt sich eine eigene Bezeichnung

# plot vorbereiten
par(mfrow = c(2, 2))

# Dein plot
plot(aus_beer, main = "Dein plot")

# plot mit manuellen Achsen
plot(aus_beer, axes = FALSE, ylim = c(300, 600), main = "Dein plot mit neuen Axen") # ohne Axen, aber mit definiertem Wertebereich für y
axis(side = 1, tick = TRUE, at = c(1992:2010), las = 2) # 1 = unten
axis(side = 2, tick = TRUE, at = c(300, 400, 500, 600), las = 2) # 2 = links, las-Argument entspricht default

# plot mit rotem Hintergrund

  # leeren Rahmen Zeichnen
  plot(aus_beer,  axes = FALSE, type = "n", ylim = c(300, 600), main = "Dein plot in rot") 

  # roten Hintergrund einfügen
  rect(xleft = par("usr") [1], xright = par("usr") [2], ybottom = par("usr") [3], ytop = par("usr") [4], col = "red")
  
  # Daten eintragen
  points(aus_beer, type = "l") # ohne Axen, aber mit definiertem Wertebereich für y
  axis(side = 1, tick = TRUE, at = c(1992:2010), las = 2) # 1 = unten
  axis(side = 2, tick = TRUE, at = c(300, 400, 500, 600), las = 2) # 2 = links, las-Argument entspricht default

# plot mit roten Segmenten

  # leeren Rahmen Zeichnen
  plot(aus_beer,  axes = FALSE, type = "n", ylim = c(300, 600), main = "Dein plot mit roten Segmenten") 
  
  # roten Hintergrund einfügen
  x_links <- par("usr") [1] + c(1:18) + 0.375
  x_rechts <- par("usr") [1] + c(1:18) + 0.625
  
  rect(xleft = x_links, xright = x_rechts, ybottom = par("usr") [3], ytop = par("usr") [4], col = "red")
  
  # Daten eintragen
  points(aus_beer, type = "l") # ohne Axen, aber mit definiertem Wertebereich für y
  axis(side = 1, tick = TRUE, at = c(1992:2010), las = 2) # 1 = unten
  axis(side = 2, tick = TRUE, at = c(300, 400, 500, 600), las = 2) # 2 = links, las-Argument entspricht default
 

Re: Grafik mit Punkten für 4Quartal

Verfasst: Fr Okt 04, 2019 11:22 am
von Hufeisen
Hey EDi, kannst du dir noch mal deinen Code anschauen? Im plot werden Q2 und Q3 als FALSE und Q1 und Q4 als TRUE markiert. Ich habe zur Verdeutlichung deinen plot modifiziert. Warum das passiert, ist mir schon irgendwie klar. Eigentlich sollte color = x %% 1 %in% c(0.75, 0.00)) Q4 abgrenzen, markiert aber zwei Punkte statt das Intervall um Q4. Deshalb habe ich bei mir die Rechtecke um eine halbe Intervallbreite verschoben, also um ein Achtel Jahr (0.25/2).
Ehrlich gesagt, verstehe ich die Syntax x %% 1 %in% nicht. %in% ist mir bekannt, aber nur mit Variablen. Was bedeutet die 1, wie wird die interpretiert? Was bedeutet x %%? Danke

Code: Alles auswählen

# Daten zur visuellen Kontrolle
> head(aus_beer)
     Qtr1 Qtr2 Qtr3 Qtr4
1992  443  410  420  532
1993  433  421 

# los geht's
library(fpp2)
aus_beer <- window(ausbeer, start = 1992)

# EDis Variante
  df <- fortify(aus_beer)
  ggplot(data = df, aes(x = x, y = y, color = x %% 1 %in% c(0.75, 0.00))) +
    geom_line(aes(group = 1), size = 3) +
    scale_x_continuous(breaks = seq(min(df$x), max(df$x))) +
    theme(axis.text.x = element_text(angle = -90, vjust = 0.5))