Seite 1 von 1

Jahreszahlen auf x-Achse zweistellig darstellen

Verfasst: Sa Jun 03, 2017 3:28 pm
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.

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Verfasst: Sa Jun 03, 2017 3:49 pm
von jogo
Hallo Laubsauger,

Du suchst sprintf():

Code: Alles auswählen

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

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Verfasst: Sa Jun 03, 2017 5:39 pm
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.

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Verfasst: Sa Jun 03, 2017 7:46 pm
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

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Verfasst: Mo Jun 05, 2017 12:03 pm
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:

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Verfasst: Mo Jun 05, 2017 12:40 pm
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

Re: Jahreszahlen auf x-Achse zweistellig darstellen

Verfasst: Di Jun 06, 2017 6:51 pm
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")