2013-08-07 9 views
7

Aus meteorologischen Daten (stündliche Werte von Temperatur, Wind und Luftfeuchtigkeit) konnte ich Zeitreihen von Windgeschwindigkeit und Windrichtung darstellen. Jetzt möchte ich Windvektoren auf dem Zeitreihendiagramm hinzufügen. Hier sehen Sie die Ausgabe, die ich möchte (Pfeile über der tatsächlichen Zeichnung).ggplot2 wind time series mit pfeilen/vektoren

enter image description here

ich ggplot2 verwende, gesucht durch Stackoverflow, ggplot2 Paket docs (wird fortgesetzt) ​​aber keine Lösung gefunden. Jede Idee oder Angabe, wo Sie suchen sollten, wäre ein Ausgangspunkt.

Vielen Dank im Voraus

EDIT FRAG Wie in einem Kommentar von @slowlearner vorgeschlagen, dass ich hier Code und Daten hinzufügen, ein reproduzierbares Beispiel zu machen. Es sieht so aus, als könnte geom_segment den Trick machen. Ich habe es geschafft, in geom_segment zu berechnen, kann aber nicht herausfinden, wie xend zu finden ist, da die x-Achse eine Zeitachse ist. Ich habe Windgeschwindigkeit und Richtungsdaten, so kann ich x, y Windkomponenten für geom_segment berechnen, aber x muss in das Zeitformat konvertiert werden.

Hier ist der Code für das Grundstück (Temperatur) und data

for (i in 1:2) { 

rams=subset(data,data$stat_id %in% i) 
tore=subset(torre,torre$stat_id %in% i) 

# Gràfica en ggplot 

# Gráfica de evolución temporal de las estaciones de la zona 

gtitol=places$nom[places$stat_id == i] 

myplot=ggplot(data=rams,aes(x=datetime, y=tempc, colour="RAMS")) + 
    geom_line() + ylab("Temperatura (ºC)") + xlab(" ") + 
    ggtitle(gtitol) + theme(legend.title=element_blank()) + theme(legend.position="bottom") + 
    scale_y_continuous(limits = c(0,40)) + 
    geom_line(data=tore,aes(x=datetime,y=temp,colour = "Torre")) 
#scale_y_continuous(breaks = round(seq(min(data$tempc), max(data$tempc), by = 2),0)) 


ggsave(myplot,filename=paste("RAMS-",i,".png",sep=""),width=7.78,height=5.79) 

} 

geom_segment docs Linien I

versucht
p=ggplot(tore, aes(x =datetime, y = 5)) 
p + geom_segment(aes(xend = datetime, yend = 5 + v), arrow = arrow(length = unit(0.1,"cm"))) 

bekommen diese Art von Figur. Sie können sehen, x-Koordinate ist Datetime, wie soll ich Windkomponente konvertieren, um xend zu bekommen? Inzwischen xend Datetime ist gleich, aber ich würde so etwas wie wie „Datetime + xwindcomp“

enter image description here

Danke für Ihre Hilfe

+2

Siehe "geom_segment" und beachten Sie, dass es ein 'arrow' Argument hat. – joran

+1

check out calenderPlot() aus dem Open-Air-Paket, könnte es eine Hilfe sein, auch wenn es keine Zeitreihen macht. – eliavs

+1

'geom_segment (aes (x = 0, y = 0, xend = xend, yend = 0), Linie, Pfeil = Pfeil (Typ =" geschlossen ", Winkel = 23), color =" rot ", Größe = 1.0) 'ist was ich verwende, um einen Pfeil in einem ggplot-Graphen zu zeichnen. Ist es das, was du wissen musst? Btw: arrow ist eine Funktion im Grid-Paket. – ROLO

Antwort

3

So wie eine Präambel, stellen Sie sicher, dass Sie umfassen alle Code und relevante Daten in Zukunft Fragen. Wenn Sie Ihre Frage oben betrachten, werden Sie sehen, dass einige Objekte wie torre nicht definiert sind. Das bedeutet, dass wir nicht kopieren und in unsere R-Setups einfügen können. Außerdem konnten die Daten, mit denen Sie verknüpft waren, nicht mit dem Code in der Frage verwendet werden, da es sich um eine begrenzte Teilmenge handelte. Mein Rat: (a) Erstellen Sie gefälschte Daten, die wie die von Ihnen verwendeten Daten aussehen. (B) Halten Sie Ihren Code auf dem absoluten Minimum (c) Testen und überprüfen Sie Code und Daten in einer neuen R-Sitzung vor.

Soweit ich Ihnen sagen können, wollen Sie etwas wie das unten. Natürlich müssen Sie es für Ihre eigenen Zwecke anpassen, aber es sollte Ihnen einige Ideen geben, wie Sie Ihr Problem angehen können. Beachten Sie, dass die meisten kosmetischen Eigenschaften wie Linienfarben, Dicken, Legenden und Titel in der Zeichnung weggelassen wurden: Sie sind für die Zwecke dieser Frage nicht wichtig. BEARBEITEN Ein anderer Ansatz könnte darin bestehen, den gleichen Datenrahmen für die Winddaten zu verwenden und dann eine Facettierungsvariable zu verwenden, um die Geschwindigkeit in einer anderen, aber verknüpften Darstellung anzuzeigen.

require(ggplot2) 
require(scales) 
require(gridExtra) 
require(lubridate) 
set.seed(1234) 

# create fake data for temperature 
mydf <- data.frame(datetime = ISOdatetime(2013,08,04,0,0,0) + 
        seq(0:50)*10*60, 
        temp = runif(51, 15, 25)) 

# take a subset of temperature data, 
# basically sampling every 60 minutes 
wind <- mydf[minute(mydf$datetime) == 0, ] 
# then create fake wind velocity data 
wind$velocity <- runif(nrow(wind), -5, 20) 
# define an end point for geom_segment 
wind$x.end <- wind$datetime + minutes(60) 

ggplot(data = mydf, aes(x = datetime, y = temp, group = 1)) + 
    geom_line() + 
    geom_segment(data = wind, 
       size = 3, 
       aes(x = datetime, 
        xend = x.end, 
        y = 10, 
        yend = velocity), 
       arrow = arrow(length = unit(0.5, "cm"))) + 
    theme() 

Dies erzeugt den folgenden Inhalt: screenshot

+0

Danke @slowlearner Es funktioniert großartig, genau das, was ich gesucht habe. Es tut mir leid für die Daten, dachte, es war genug mit den Daten in der Schleife zum Plotten verwendet. Ich wollte Sie nur davor bewahren, Daten zu formatieren. Versuchen Sie das nächste Mal am besten und danke nochmal. – pacomet

0

Berechne die Richtung des Windes verwendet Dezimalgraden. Angenommen, Sie möchten, dass 0 Grad Norden (nach oben) ist, verwenden Sie Folgendes:

ggplot(data = wind, aes(x=datetime, y=temp)) + 
    geom_text(aes(angle=-wind_dir_degrees+90), label="→")