R ggplot2:条形图上覆盖的线条(来自不同的数据框)

时间:2017-02-19 19:13:00

标签: r ggplot2

我有一组来自一组月度数据的条形图,我想以一条线的形式从另一组月度数据中叠加数据。这是一个简化的例子(在我的数据中,第二个数据集不是对第一个数据集的简单操作):

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

非常适合获取条形图: enter image description here

但是我已经尝试了多次迭代来获取那条线并且无法弄清楚(就像这样):

p + geom_line(data=otherTest,size=1, color=rgb(0,.5,0)

另外,如果有人知道我怎么能把这些酒吧放在彼此面前,这样你所看到的就是一个高度为500的红条,我会很感激任何建议。我知道我可以把矩阵的两条线之间的差别保持为堆叠条,但我认为可能有一种简单的方法可以将两个条形放在x轴上,白色放在红色前面。谢谢!

1 个答案:

答案 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