我有一组来自一组月度数据的条形图,我想以一条线的形式从另一组月度数据中叠加数据。这是一个简化的例子(在我的数据中,第二个数据集不是对第一个数据集的简单操作):
library(reshape2)
library(ggplot2)
test<-abs(rnorm(12)*1000)
test<-rbind(test, test+500)
colnames(test)<-month.abb[seq(1:12)]
rownames(test)<-c("first", "second")
otherTest<-apply(test, 2, mean)
test<-melt(test)
otherTest<-as.data.frame(otherTest)
p<-ggplot(test, aes(x=Var2, y=value, fill=Var1, order=-as.numeric(Var2))) + geom_bar(stat="identity")+
theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(),
panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) +
ggtitle("Test Graph") +
scale_fill_manual(values = c(rgb(1,1,1), rgb(.9,0,0))) +
guides(fill=FALSE) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
但是我已经尝试了多次迭代来获取那条线并且无法弄清楚(就像这样):
p + geom_line(data=otherTest,size=1, color=rgb(0,.5,0)
另外,如果有人知道我怎么能把这些酒吧放在彼此面前,这样你所看到的就是一个高度为500的红条,我会很感激任何建议。我知道我可以把矩阵的两条线之间的差别保持为堆叠条,但我认为可能有一种简单的方法可以将两个条形放在x轴上,白色放在红色前面。谢谢!
答案 0 :(得分:1)
你在这里遇到一些问题。
直接回答您的问题,如果您未通过mapping
通过aes(...)
进行geom通话(例如您的geom_line...
),则映射将来自{{ 1}}。您的ggplot()
指定了ggplot()
。所有这些变量名称必须存在于您的数据框x=Var2, y=value, fill=Var1...
中,才能实现这一目标,而且他们现在还没有。
因此,您需要确保otherTest
中存在这些变量名称,或者在otherTest
中单独指定mapping
。您可能想要了解这些分层选项的工作原理。例如,here's a post of mine详细介绍。
如果您选择第一个选项,还需要考虑其他一些问题:
geom_line
两个数据框中具有相同级别的因素吗?它可能应该是。Var2
,您可能需要添加geom_line
。见here。其他一些人,但这里有一个关于你可能会做什么的简短例子:
group = 1