Fehler in der Grafik

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
PlayStat

Fehler in der Grafik

Beitrag von PlayStat »

Hallo,

ich habe ein Problem. Und zwar finde ich den Fehler nicht. Warum wird die Grafik auf der X-Achse nicht richtig dargestellt?
grafik.jpg
library(ggplot2)
ggplot(xom,aes(Date,Adj.Close, group=1))+
geom_line(aes(color="xom"))+
geom_line(data=bp,aes(color="bp"))+
labs(color="Legend")+
ylab("Close Price, USD")+
scale_colour_manual("",breaks=c("xom","bp"),
values = c("blue","brown"))+
theme(plot.title = element_text(lineheight = .7, face="bold"))+
annotate("text",x=xom[which.max(xom$Adj.Close),1],y=max(xom$Adj.Close),label="90,06", cex=2.1)+
annotate("text",x=bp[which.max(bp$Adj.Close),1],y=max(bp$Adj.Close),label="40,17", cex=2.1)

max(xom$Adj.Close)
which.max(xom$Adj.Close)
max(bp$Adj.Close)
which.max(bp$Adj.Close)
Hoffe ihr könnte mir weiterhelfen. Danke!
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Fehler in der Grafik

Beitrag von EDi »

Was wird nicht richtig dargestellt?
Siehe ?scale_x_date falls du die Achse anpassen möchtest (z.b. Ticks nur monatlich).
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.
PlayStat

Re: Fehler in der Grafik

Beitrag von PlayStat »

Die X-Achse hat unten diesen Balken. Das liegt daran, dass er die Werte täglich ausgegeben werden und deswegen extrem gestaucht sind. Ich habe es mit scale_x_date schon ausprobiert, aber ich bekomme es damit nicht hin. Wie genau würde der Befehl aussehen, wenn ich die Werte nur halbjährig haben wollen würde?
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Fehler in der Grafik

Beitrag von EDi »

Wie genau würde der Befehl aussehen, wenn ich die Werte nur halbjährig haben wollen würde?

Code: Alles auswählen

scale_x_date(date_breaks = "6 months", labels =  date_format("%b %y"))
Ohne Gewähr, da kein reproduzierbares Beispiel zur Verfügung steht. labels= ist nicht notwendig um deine Frage zu beantworten und nur Ästhetik.
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.
PlayStat

Re: Fehler in der Grafik

Beitrag von PlayStat »

Genauso habe ich es probiert. Leider funktioniert es immernoch nicht. Ich versuche ein reproduzierendes Beispiel zu erstellen.

xom<- read.csv("XOM.csv", header=TRUE, sep=",")
bp<- read.csv("BP.csv", header=TRUE, sep=",")

xomclose<- as.numeric(xom[,6])
date<- as.Date(xom[,1],"%y-%m-%d")

bpclose<- as.numeric(bp[,6])
date1<- as.Date(bp[,1],"%y-%m-%d")

library(ggplot2)
ggplot(xom,aes(Date,Adj.Close, group = 1))+
geom_line(aes(color="xom"))+
geom_line(data=bp,aes(color="bp"))+
labs(color="Legend")+
ylab("Close Price, USD")+
scale_colour_manual("",breaks=c("xom","bp"),
values = c("blue","brown"))+
scale_x_date(date_breaks = "6 months")+
ggtitle("Closing Stock Prices: Exxon vs BP",subtitle = NULL)+
theme(plot.title = element_text(lineheight = .7, face="bold"))+
annotate("text",x=xom[which.max(xom$Adj.Close),1],y=max(xom$Adj.Close),label="90,06", cex=2.1)+
annotate("text",x=bp[which.max(bp$Adj.Close),1],y=max(bp$Adj.Close),label="40,17", cex=2.1)

max(xom$Adj.Close)
which.max(xom$Adj.Close)
max(bp$Adj.Close)
which.max(bp$Adj.Close)
Könntest du damit arbeiten? Ist das ein reproduzierbares Beispiel? Wenn ich
scale_x_date(date_breaks = "6 months")
versuche einzuarbeiten, dann bekomme ich die Fehlermeldung: Error: Invalid input: date_trans works with objects of class Date only und die Grafik entsteht garnicht mehr.
Dateianhänge
XOM.csv
(51.52 KiB) 61-mal heruntergeladen
BP.csv
(51.15 KiB) 63-mal heruntergeladen
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Fehler in der Grafik

Beitrag von EDi »

Könntest du damit arbeiten? Ist das ein reproduzierbares Beispiel?
Das ist schonmal eine guter Anfang. Wäre besser, wenn du die unnötigen code-Stücke weggelassen hättest (muss ich mich durch weniger durchlesen).

Code: Alles auswählen

Error: Invalid input: date_trans works with objects of class Date only
Hmm... Das sagt mit also das date_trans eine Objekt der Klasse "Date" erwartet.
Mal schauen was wir ggplot übergeben:

Code: Alles auswählen

> str(xom)
'data.frame':	757 obs. of  7 variables:
 $ Date     : Factor w/ 757 levels "2014-11-03","2014-11-04",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Open     : num  96.6 94.5 95.4 95.2 95.8 ...
 $ High     : num  97.1 94.9 95.8 96.4 97.2 ...
 $ Low      : num  94.8 93.9 94.7 94.3 95.7 ...
 $ Close    : num  95.3 94.5 95.1 96.3 96.6 ...
 $ Adj.Close: num  85.1 84.4 84.9 86 86.9 ...
 $ Volume   : int  13410000 13498500 12480000 14731400 13233500 9087600 7990000 11592800 12355400 9352500 ...
Aha! Date ist gar nicht in einem Datumsformat, sondern ein Faktor!
Das gleiche gilt für bp...

Das ist schnell gefixt:

Code: Alles auswählen

xom$Date <- as.Date(xom$Date)
bp$Date <- as.Date(bp$Date)
Tadaaa, es funktioniert:
Rplot.png
Falls ich noch einen ggplot tip geben darf:
* Anstatt zwei Datensätze ein zwei geom_line Aufrufe zu übergeben, ist es besser beide Datensätze zusammenzusammen und eine Variable mit 'Datensatz' (= bp und xom) hinzuzufügen. Dann hat man mehr Kontrolle über die Linien (aber es gibt auch Situationen wo es sinnvoll ist das zu trennen).
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.
PlayStat

Re: Fehler in der Grafik

Beitrag von PlayStat »

Ah, okay. Dann war das ja wirklich was ganz banales. Vielen Dank für deine Hilfe und den Tipp! Der Fehler passiert mir sicherlich nicht nochmal :D
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Fehler in der Grafik

Beitrag von EDi »

Der Fehler passiert mir sicherlich nicht nochmal :D
Das glaube ich nicht. Aber beim nächsten mal weißt du wonach du schauen musst ;)
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