Jahreszahlen auf x-Achse zweistellig darstellen

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
Laubsauger

Jahreszahlen auf x-Achse zweistellig darstellen

Beitrag von Laubsauger »

Das Thema könnte bei "Allgemeines zu R" genauso stehen. Im Endeffekt get es um Folgendes: Ich habe in meinem data.frame eine Variable year, welche - guess what! - Jahreszahlen anzeigt! Und zwar von 2002 bis 2012. Nun möchte ich aber in meinem ggplot, dass die Jahreszahlen nicht vier- sondern zweistellig angezeigt werden, alos 02, 03, 04 etc. Die erste Idee war, einfach mal mutate(year=year-2000) zu machen, aber dann wird 2,3,4 etc. angzeigt, d.h. die Nullen wurden unterschlagen.

Dann habe ich versucht, die Variable in einen factor umzuwandeln und entsprechende labels zu verteilen. Dann meckert R aber wegen anderen Dingen rum.

Also ich denke, das einfachste wäre wohl, wenn man R einfach erklären könnte, die numerische Variable year immer zweistellig anzuzeigen und von links mit Nullen zu füllen, falls nötog. Ich habe im ggplot-Befehl auch eingestellt, dass nur jeder zwei Wert angezeigt wird. Am Ende soll also auf der x-Achse beschfitet sein: 02, 04, 06, 08, 10, 12.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Beitrag von jogo »

Hallo Laubsauger,

Du suchst sprintf():

Code: Alles auswählen

sprintf("%02d", 1:10)
Gruß, Jörg
Laubsauger

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Beitrag von Laubsauger »

Okay, damit habe ich es jetzt hingekriegt. Danke schonmal.

Das Ding ist allerdings, dass diese Zeitreihe nicht nur einmal vorkommt, sondern sich mehrere hundert mal wiederholt. Ich habe halt jetzt einfach den Datensatz so sortiert, dass die Jahre 2002-2012 immer in der Reihenfolge untereinander stehen und dann mit rep() den sprintf-Befehl entsprechend oft wiederholt.

Aber kann ich das sprintf auch in die mutate(year2=year-2000)-command integrieren?

€: Jetzt sehe ich auch gerade, dass das Ergebnis ja ein character ist, also wieder discrete. Ich brauche da aber was, das continuous ist. Sonst klappt das bei ggplot nicht.

Mein ggplot-Befehl sieht so aus:

Code: Alles auswählen

plots_line_WIOT_CAPEX_abs_1 <- ggplot(plotdata1, aes(year2, value)) +
  geom_line(aes(colour=partner_ctry, linetype=indicator)) + 
  geom_point(data=scaledet1, aes(year2, value), alpha=0) +
  facet_wrap(~forder, scales="free", ncol=3) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5),
        axis.title.x=element_blank(), axis.title.y=element_blank(),
        legend.title=element_blank(), legend.position = "bottom") +
  scale_x_continuous(breaks=seq(02, 12, 2)) +
  scale_colour_discrete(breaks=c("EA19","ROW_NON_EA19"), labels=c("EA19","Extra-EA19")) +
  scale_linetype_discrete(breaks=c("WIOT","CAPEX"), labels=c("Goods and Services","Capital"))

Ich habe das scale_x_continuous noch nicht für discrete hinbekommen.

Bei Stata kann man ja value labels zuteilen und diese in Achsenbeschriftungen anzeigen lassen. Dass also der Variablenwert 2002 ist, aber 02 wird angezeigt. Es wäre wohl sehr praktisch, wenn man hier was ähnliches bekäme.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Beitrag von jogo »

leider bin ich nicht so ein Grafikexperte.
Eigentlich sollte es immer so funktionieren: es gibt eine Funktion, mit der man die Achse formatieren kann.
Da gibt es dann solche Parameter wie at= und label=, mit denen man festlegen kann für welche Werte Striche auf der Achse gezeichnet werden und wie die anzubringenden Beschriftungen aussehen sollen. Für die Beschriftungen ist es recht passend, dass sprintf() einen character-Vektor liefert ... (die Namen der Parameter können gegebenenfalls anders sein)

Gruß, Jörg
Laubsauger

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Beitrag von Laubsauger »

LoL, jetzt habe ich nochmal selber gesucht und nach fünf Minuten die richtige Lösung gefunden.

Man muss tatsächlich bei scale_x_continuous nur einen Vektor mit den entsprechenden labels einfügen, also:

Code: Alles auswählen

  scale_x_continuous(breaks=seq(2002, 2012, 2),
                     labels=c("02","04","06","80","10","12")) +
Wieder mal typisch. Ich suche wie ein Irrer, stelle die Frage dann in einem Forum und dann finde ich's innerhalb von ein paar Minuten selber. :roll: :lol:
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Beitrag von jogo »

Dann mach doch:

Code: Alles auswählen

y <- seq(2002, 2012, 2)
...
  scale_x_continuous(breaks=y, labels=sprintf("%02d", y)) + ...
Gruß, Jörg
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Beitrag von EDi »

Ich würde es so machen:

Code: Alles auswählen

library(ggplot2)

last_years <- Sys.Date() - 0:(365.25*10)
df <- data.frame(
  date = last_years,
  price = runif(length(last_years))
)
base <- ggplot(df, aes(date, price)) +
  geom_line()

base

base + scale_x_date(date_labels = "%y")
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.
Antworten