2010-08-06 12 views
9

Ich würde gerne wissen, wie man es so macht, dass x und y im folgenden Beispiel auf der vertikalen Achse für jedes Element des Rahmens in der horizontalen Achse aufgetragen sind. Wie mache ich das mit ggplot2?ggplot und R: Zwei Variablen im Zeitverlauf

x, y = Variablen, frame = YYYYMM

Beispieldaten:

df <- structure(list(x = c(0.000892333625290767, 0.0161153931761482, 
0.0188150880795816, 0.0268699106638318, 0.018657330651898, 0.0101065034206662, 
0.00154410447630379), y = c(1.35172948829027, 0.59654026447333, 
0.685835030118683, 0.741545898152761, 1.09653338596292, 0.119448208345102, 
0.104092642854814), frame = c(200912, 201001, 201002, 201003, 
201004, 201005, 201006)), .Names = c("x", "y", "frame"), row.names = c("1", 
"2", "3", "4", "5", "6", "7"), class = "data.frame") 

Ich habe in der Lage gewesen, einen in einer Linie aufgetragen zu bekommen, aber es scheint, dass es meinen Rahmen nicht zu erkennen ist, als kategorisch (nicht dass es ist, noch weiß ich, wie man es zu solchen ändert).

p <- ggplot(df, aes(x=frame, y=x)) 
p + geom_line() 

Antwort

10

Sie müssen Ihre Daten schmelzen:

library(reshape2) 
dfm = melt(df, id.vars='frame') 
ggplot(dfm, aes(x=frame, y=value, colour=variable)) + geom_line() 

Dies ist, was das für Ihre Datenrahmen tut:

> dfm 
    frame variable  value 
1 200912  x 0.0008923336 
2 201001  x 0.0161153932 
3 201002  x 0.0188150881 
4 201003  x 0.0268699107 
5 201004  x 0.0186573307 
6 201005  x 0.0101065034 
7 201006  x 0.0015441045 
8 200912  y 1.3517294883 
9 201001  y 0.5965402645 
10 201002  y 0.6858350301 
11 201003  y 0.7415458982 
12 201004  y 1.0965333860 
13 201005  y 0.1194482083 
14 201006  y 0.1040926429 
+0

Danke, aber das behandelt Standbild als eine kontinuierliche Variable, wenn es –

+1

kategorisch sein sollte, bevor schmelzen, Frame in einen Faktor umwandeln: df $ frame = factor (df $ frame) – Greg

9

Dies ist eine eher späte Antwort, aber wenn Sie möchten, dass Ihre frame Variable interpretiert Datum (Monat des Jahres), dann konvertieren Sie es in ein Datum.

Sie können dann scale_x_date verwenden und das scales Paket der x-Achse zu forma

DF <- melt(df, id.vars = 'frame') 
# note that I am arbitrarily setting each month to be the 15th 
# day of the month, to create a complete date 
DF$date <- as.Date(paste0(as.character(df$frame), '15'), '%Y%M%d') 
library(scales) 
ggplot(DF, aes(x =frame, y = value, colour = variable)) + 
geom_line() + 
scale_x_date('Month', labels = date_format('%b %Y'), breaks = date_breaks('2 months')) 

enter image description here

Verwandte Themen