2010-08-06 46 views
9

Tôi muốn biết cách tạo nó sao cho x và y, trong tập dữ liệu ví dụ sau được vẽ trên trục dọc cho mỗi phần tử của khung trong trục hoành. Làm thế nào để làm điều này với ggplot2?ggplot và R: Hai biến theo thời gian

x, y = biến, khung = YYYYMM

Ví dụ dữ liệu:

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

tôi đã có thể để có được một âm mưu trong một dòng, nhưng có vẻ như nó không nhận ra khung của tôi như phân loại (không phải là nó, cũng không phải tôi biết làm thế nào để thay đổi nó để như vậy).

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

Trả lời

10

Bạn cần để làm tan chảy dữ liệu của bạn:

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

Đây là những gì mà không để khung dữ liệu của bạn:

> 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

Cảm ơn bạn, nhưng điều này vẫn đối xử với khung như là một biến liên tục, khi nó phải được phân loại –

+1

trước nóng chảy, biến khung thành một yếu tố: df $ frame = factor (df $ frame) – Greg

9

Đây là một câu trả lời khá muộn, nhưng nếu bạn muốn của bạn frame ngày tháng biến đổi (tháng của năm), sau đó chuyển đổi nó thành một ngày.

Sau đó bạn có thể sử dụng scale_x_datescales gói để định dạng trục 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

Các vấn đề liên quan