很抱歉再次打扰你们,但是我正在努力完成一项简单的任务,在寻找解决方案并浏览互联网之后,我无法解决这个问题。 这是合约。我有三个数组
c1 <- data.frame(cf=rep(100,10),m=seq(1,10,1))
c1$cf[10] <- 500
c2 <- data.frame(cf=rep(50,10),m=seq(1,20,2))
c2$cf[10] <- 650
c3 <- data.frame(cf=rep(150,5),m=seq(1,20,4))
c3$cf[5] <- 450
我希望创建一个堆积条形图,其沿x的顺序为1到20(三个第二列的所有可能条目)和沿y的三个第一列的(可能的)总和。
我尝试合并三个数据框
m <- merge(c1,c2,by="m",all=TRUE)
m <- merge(m,c3,by="m",all=TRUE)
我融化了
m1 <- melt(m,id="m")
m1 <- na.exclude(m1)
并尝试使用ggplot作为
ggplot(data=m1,aes(x=m,y=value,fill=row))
但我没有得到任何东西,但仍然不知道如何以正确的方式显示条形图,以及这是否是我想做的事情的正确方法。
万一,非常感谢你的帮助。
答案 0 :(得分:3)
首先让我们看一下你的数据:
head(m1)
# m variable value
# 1 1 cf.x 100
# 2 2 cf.x 100
# 3 3 cf.x 100
# 4 4 cf.x 100
# 5 5 cf.x 100
# 6 6 cf.x 100
看起来很好。现在让我们来看看你的绘图命令:
ggplot(data=m1,aes(x=m,y=value,fill=row))
两个问题:首先,引用上面的数据没有名为“row”的列。我假设您想要基于名为“变量”的列填充颜色:
ggplot(data = m1, aes(x = m, y = value, fill = variable))
# Error: No layers in plot
第二,什么类型的情节?酒吧情节?散点图?箱形图?你需要告诉ggplot
要绘制什么。这就是错误消息告诉您的内容 - 您提供了数据,但没有指示要绘制的内容。 ggplot2
的任何介绍都会介绍这一点。
ggplot(data = m1, aes(x = m, y = value, fill = variable)) +
geom_bar()
但是现在又出现了另一个错误:
错误:将变量映射到y并使用stat =“bin”。 使用stat =“bin”,它将尝试将y值设置为每个组中的个案数。 这可能会导致意外行为,并且在将来的ggplot2版本中将不允许这样做。 如果您希望y表示案例计数,请使用stat =“bin”并且不要将变量映射到y。 如果您希望y表示数据中的值,请使用stat =“identity”。 有关示例,请参阅?geom_bar。 (已解散;最后一次在0.9.2版本中使用)
这是一个有用的错误,最好的一种! 如果您希望y表示数据中的值,请使用stat =“identity”。
ggplot(data = m1, aes(x = m, y = value, fill = variable)) +
geom_bar(stat = "identity")
它有效。