R ggplot2:条形图上覆盖的线(来自单独的数据帧)
我有一个来自一组月度数据的条形图,我想把来自另一组月度数据的数据以直线的形式叠加在上面。以下是我的数据中的一个简化示例。第二个数据集不是第一个数据集的简单操作:R ggplot2:条形图上覆盖的线(来自单独的数据帧),r,ggplot2,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", "se
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))
此外,如果有人知道我如何使酒吧在对方面前,使你看到的是一个红色的酒吧高度500,我将感谢任何建议。我知道我可以把矩阵的两条线之间的差值作为一个堆叠的条,但我认为可能有一种简单的方法可以将两条条条放在x轴上,红色前面是白色。谢谢 这里有几个问题要处理 直接回答您的问题,如果您不通过aes提供映射。。。在geom调用中,如geom_line…,则映射将来自ggplot。ggplot指定x=Var2,y=value,fill=Var1。。。。所有这些变量名都必须存在于您的数据框otherTest中才能正常工作,而它们现在不存在 所以,您需要确保这些变量名存在于otherTest中,或者在geom_行中单独指定映射。您可能想了解一下这些分层选项是如何工作的。例如,这涉及到一些细节 如果您选择第一个选项,还需要考虑一些其他问题: Var2是两个数据帧中具有相同级别的因子吗?也许应该是这样。 要按原样使用geom_线,可能需要添加group=1。看见 还有一些,但这里有一个简单的例子,说明你可能会做什么:
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 <- data.frame(
Var2 = names(otherTest),
value = otherTest
)
otherTest$Var2 = factor(otherTest$Var2, levels = levels(test$Var2))
ggplot(test, aes(x = Var2, y = value, group = 1)) +
geom_bar(aes(fill = Var1), stat="identity") +
geom_line(data = otherTest)
这很有效,谢谢!为什么您需要一条包含Var2的线路?我把它拿了出来,它看起来仍然很好用。还有,你有没有想过如何把一根杆放在另一根杆的前面,而不是叠在一起?我用因子来确定顺序。使用字符串将为您创建我希望避免的顺序。如果在每一条前面都重新加上一条,您可以尝试添加position=identity
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 <- data.frame(
Var2 = names(otherTest),
value = otherTest
)
otherTest$Var2 = factor(otherTest$Var2, levels = levels(test$Var2))
ggplot(test, aes(x = Var2, y = value, group = 1)) +
geom_bar(aes(fill = Var1), stat="identity") +
geom_line(data = otherTest)