2010-08-06 94 views
9

我想知道如何使它在下面的示例數據集中的x和y繪製在橫軸上的每個框架元素的縱軸上。我如何使用ggplot2來做到這一點?ggplot和R:隨着時間的推移兩個變量

X,Y =變量,幀= YYYYMM

示例數據:

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") 

我已經能夠得到一個在一條線上繪製,但似乎它不承認我的幀絕對的(並非如此,我也不知道如何改變它)。

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

回答

10

您需要融化你的數據:

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

這是什麼,做你的數據幀:

> 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

謝謝你,但是這仍然把幀作爲一個連續變量,當它之前應該是分類 – 2010-08-06 20:31:31

+1

融化,將框架變成一個因子:df $ frame = factor(df $ frame) – Greg 2010-08-06 20:58:13

9

這是一個相當晚的答案,但如果你想你的frame變量的解釋日期(一年中的月份),然後將其轉換爲日期。

然後可以使用scale_x_datescales包格式化x軸

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

相關問題