GGPlot: Vertikale Linie

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
MarinaGrey02
Beiträge: 14
Registriert: Fr Okt 04, 2019 9:44 am

GGPlot: Vertikale Linie

Beitrag von MarinaGrey02 »

Guten Morgen,

ich bin gerade dabei meine Daten über CO2 Futures grafisch darzustellen und möchte dies gerne mit ggplot machen, sieht einfach besser aus als mit der normalen plot Funktion. Meine Daten reichen vom 01.01.2005 bis zum 31.12.2012 und ich würde gerne einen vertikalen Strich beim 01.01.2008 durch mein Diagramm laufen lassen, da dort die zweite Handelsphase anfängt. Das einzige Problem bei ggplot stellt die Angabe des Datums dar, bei der normalen plot Funktion mache ich dies ja mit format. Bei der normalen Plot-Funktion weiß ich wie das geht: (Datum auf der X-Achse, Preise auf der y-Achse):
Zunächst muss ja das Datum richtig umgewandelt werden:

Code: Alles auswählen

old$datum <- as.character(old$datum)
old$datum <- as.Date(old$datum, format = "%d.%m.%Y")
Dies zeit er dann in der Tabelle wie folgt an: 2005-01-01, 2005-01-02

Dann der normale Plot Code:

Code: Alles auswählen

plot(old$datum, old$ice_eua, type = "l",
     xlab = "", ylab = "Euro in Tonnen")
abline(v=as.Date("2008-01-01",format = "%Y-%m-%d"), lty = 2)
Dies ist der GGPlot Code:

Code: Alles auswählen

ggplot(old, aes(x = old$datum, y = old$ice_eua)) + geom_line() 
last_plot() + labs(x = "Zeit", y = "Euro in Tonnen") + ylim(0,50)
last_plot() + scale_x_date(date_breaks = "1 year", date_labels = "%Y")
last_plot() + geom_vline(aes(xintercept = "2008-01-01", format("%Y-%m-%d")), linetype = 2)
Wie ihr sehen könnt, würde ich gerne jedes Jahr ausweisen (2005, 2006 usw.) und die Y-Achse habe ich auch schon skaliert. Es fehlt nur der vertikale (am besten gestrichelte) Strich beim 01.01.2008.

Danke für eure Hilfe,
Maren
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: GGPlot: Vertikale Linie

Beitrag von Athomas »

Daran sind wohl schon einige gescheitert, xintercept verdaut offenbar nur numerische Werte...
Das Internet empfiehlt:

Code: Alles auswählen

geom_vline(aes(xintercept = as.numeric(as.Date("2008-01-01"))), linetype=2)
Was "ylim" macht, ist Dir klar!?
MarinaGrey02
Beiträge: 14
Registriert: Fr Okt 04, 2019 9:44 am

Re: GGPlot: Vertikale Linie

Beitrag von MarinaGrey02 »

Danke dir Thomas! Genau so sollte es aussehen!
Ja mit ylim gebe ich Minimum und Maximum an oder nicht? Meine Y-Achse geht von 0 bis 50.
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: GGPlot: Vertikale Linie

Beitrag von Athomas »

Ja mit ylim gebe ich Minimum und Maximum an oder nicht? Meine Y-Achse geht von 0 bis 50.
Die interessante Frage ist, was mit Werten ausserhalb dieses Spektrums passiert: ylim schmeisst sie weg, als wären sie nie dagewesen!
Wenn man dagegen lediglich einen "optischen Zoom" haben will (zumindest ich finde das normal) muss man "coord_cartesian" verwenden...
MarinaGrey02
Beiträge: 14
Registriert: Fr Okt 04, 2019 9:44 am

Re: GGPlot: Vertikale Linie

Beitrag von MarinaGrey02 »

Der höchste Wert liegt bei knapp 30€ und der niedrigste bei 0,2€, also kann er ja gar nicht rauswerfen, oder nicht?

wenn ich die Graphik jetzt nur mit der normalen Plot-Funktion erstellen, wie skaliere ich denn dann das Datum so wie bei GGPlot? mit scale_x_date geht es ja dann nicht mehr. Hättest du dafür nochmal einen Tipp? Wenn nicht gar kein Thema!

Code: Alles auswählen

plot(old$datum, old$ice_eua, type = "l", ylab = "Preis", xlab = "", ylim = c(0,50))
abline(v=as.Date("2008-01-01",format = "%Y-%m-%d"), lty = 2)
Es geht quasi darum, dass das Datum wie bei GGPlot wie folgt angezeigt werden soll: 2005, 2006, 2007 usw. - dies wirft die Plot funktion aber nicht automatisch aus, sie integriert Jahresabstände von 2 Jahren, ich möchte aber nur von einem Jahr. Mit xlim geht das ja nicht einfach so?
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: GGPlot: Vertikale Linie

Beitrag von Athomas »

wenn ich die Graphik jetzt nur mit der normalen Plot-Funktion erstellen, wie skaliere ich denn dann das Datum so wie bei GGPlot?
Tut mir leid, ich mache nix anderes als ggplot!
Hättest du dafür nochmal einen Tipp? Wenn nicht gar kein Thema!
Danke schön :lol: !
MarinaGrey02
Beiträge: 14
Registriert: Fr Okt 04, 2019 9:44 am

Re: GGPlot: Vertikale Linie

Beitrag von MarinaGrey02 »

Alles klar! Danke dir aber für deine ganze Hilfe!

War gerade kurz am überlegen, ob ich jetzt GGPlot oder die normale Plot Funktion für die Grafiken in meiner Bachelorarbeit nehme. Aber GGPlot sieht schon wissenschaftlicher aus.

Liebe Grüße,
Maren
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: GGPlot: Vertikale Linie

Beitrag von bigben »

Hallo MarinaGrey02,
MarinaGrey02 hat geschrieben: Di Nov 05, 2019 11:26 amEs geht quasi darum, dass das Datum wie bei GGPlot wie folgt angezeigt werden soll: 2005, 2006, 2007 usw. - dies wirft die Plot funktion aber nicht automatisch aus, sie integriert Jahresabstände von 2 Jahren, ich möchte aber nur von einem Jahr.
Ohne Beispieldaten habe ich das jetzt nicht ausprobiert, aber in base graphics macht man das normalerweise mit axis:

Code: Alles auswählen

plot(1:10, rnorm(10), type="l", xaxt="n")
axis(1, at=seq(1,10,.5))
Was dann wirklich angezeigt wird hängt aber auch davon ab, wie groß die Grafik gezeichnet wird, ob genug Platz für alle Zahlen/Daten da ist.
Aber GGPlot sieht schon wissenschaftlicher aus
Da klingelt in meinen Ohren, wie R früher damit beworben wurde, dass base "publication ready graphics" erzeugen würde. Ich kann verstehen, dass ggplot2-Grafiken als aesthetisch schöner empfunden werden, zumindest wenn man nicht selbst viel Mühe in die Gestaltung stecken möchte. Wissenschaftlicher finde ich daran nichts, aber auch das liegt bestimmt im Auge des Betrachters.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
ruedi_br
Beiträge: 159
Registriert: Do Mär 01, 2018 3:53 pm

Re: GGPlot: Vertikale Linie

Beitrag von ruedi_br »

Wenn man Themes bei ggplot verwendet, ist zumindestens sichergestellt, dass eine Grafik vom Stil her hoffnungsvollerweise wie die nächste aussieht ;)
VG
Ruedi
fortune(111)
Antworten