我想知道如何使它在下面的示例数据集中的x和y在水平轴上的每个帧元素的垂直轴上绘制。我如何使用ggplot2执行此操作?
x,y =变量,frame = 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()
答案 0 :(得分:11)
您需要融化数据:
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
答案 1 :(得分:9)
这是一个相当晚的答案,但是如果你想要frame
变量的日期(一年中的某个月),那么将它转换为日期。
然后,您可以使用scale_x_date
和scales
包格式化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'))