Seite 1 von 1

Fehler in der Grafik

Verfasst: Fr Nov 24, 2017 6:58 pm
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!

Re: Fehler in der Grafik

Verfasst: Sa Nov 25, 2017 10:02 am
von EDi
Was wird nicht richtig dargestellt?
Siehe ?scale_x_date falls du die Achse anpassen möchtest (z.b. Ticks nur monatlich).

Re: Fehler in der Grafik

Verfasst: Sa Nov 25, 2017 2:53 pm
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?

Re: Fehler in der Grafik

Verfasst: Sa Nov 25, 2017 3:57 pm
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.

Re: Fehler in der Grafik

Verfasst: Sa Nov 25, 2017 5:22 pm
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.

Re: Fehler in der Grafik

Verfasst: Sa Nov 25, 2017 8:28 pm
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).

Re: Fehler in der Grafik

Verfasst: Sa Nov 25, 2017 8:48 pm
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

Re: Fehler in der Grafik

Verfasst: So Nov 26, 2017 12:47 am
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 ;)