【发布时间】:2017-06-29 04:15:26
【问题描述】:
我是 R 新手,我正在尝试使用 ggplot 来为每个 id 创建条形图的子集。每个条形必须按月-年(即 c 列)表示 d 列中值的总和。 d 也有 NA 值和数值。
我的数据框 df 是这样的,但它实际上有大约 10000 行:
#Example of my data
a=c(1,1,1,1,1,1,1,1,3)
b=c("2007-12-03", "2007-12-10", "2007-12-17", "2007-12-24", "2008-01-07", "2008-01-14", "2008-01-21", "2008-01-28","2008-02-04")
c=c(format(b,"%m-%Y")[1:9])
d=c(NA,NA,NA,NA,NA,4.80, 0.00, 5.04, 3.84)
df=data.frame(a,b,c,d)
df
a b c d
1 1 2007-12-03 12-2007 NA
2 1 2007-12-10 12-2007 NA
3 1 2007-12-17 12-2007 NA
4 1 2007-12-24 12-2007 NA
5 1 2008-01-07 01-2008 NA
6 1 2008-01-14 01-2008 4.80
7 1 2008-01-21 01-2008 0.00
8 1 2008-01-28 01-2008 5.04
9 3 2008-02-04 02-2008 3.84
我试着用这个来做我的图表:
mplot<-ggplot(df,aes(y=d,x=c))+
geom_bar()+
theme(axis.text.x = element_text(angle=90, vjust=0.5))+
facet_wrap(~ a)
我在 geom_bar() 的帮助下阅读:
“geom_bar默认使用stat_count:统计每个x位置的case个数”
所以,我认为它会像我遇到这个错误一样工作:
Error: stat_count() must not be used with a y aesthetic.
对于我提供的示例,我希望 id 1 的图表显示 NA 为空的月份和 9.84 的 01-2008 月份。然后对于第二个 id,我想再次拥有 NA 为空的月份和 02-2008 的 3.84 月份。
我还尝试通过使用聚合和 sum before 来绘制每个月的数据,然后在 geom_bar 的 stat 参数中使用 identity,但是,我在几个月后得到 NA,我不知道原因。
非常感谢您的帮助。
【问题讨论】:
-
您能否提供一些数据,如here 所述?最终的图表应该是什么样子?您希望它有一个 01-2008 年的条形图,高度为 9.84,第二个条形图为 02-2008 年的 3.84(基于样本数据)?
-
正是@Jan。我只是用预期的结果编辑帖子
-
像这样:
ggplot(df, aes(y=d, x=c)) + geom_col() + theme(axis.text.x = element_text(angle=90, vjust=0.5))+facet_wrap(~ a) -
谢谢@Jan。有效!我现在的问题是我不知道为什么。根据帮助,如果我想计数,我使用 geom_bar,如果我想使用数据中的值,我使用 geom_col。那么,你知道它为什么起作用吗?另外,我在 x 轴上添加了重新排序,因为我得到 01-2007、01-2008、02-2007,... 而不是 01-2007, 02-2007,... 到目前为止,我的代码看起来像:
mplot<-ggplot(e, aes(y=d,x=reorder(format(as.Date(e$b),'%m-%Y'),e$b)))+ geom_col()+ theme(axis.text.x = element_text(angle=90, vjust=0.5))+ xlab("Months")+ facet_wrap(~ a) -
我发布了一些答案,如果您能接受它作为答案,那就太好了。对于您的问题“您知道它为什么起作用吗”,我不确定您想知道什么。它起作用是因为您现在按预期使用它;)