r中的堆积条形图用于多个数据帧

时间:2015-11-19 22:51:20

标签: r bar-chart stacked-chart

很抱歉再次打扰你们,但是我正在努力完成一项简单的任务,在寻找解决方案并浏览互联网之后,我无法解决这个问题。 这是合约。我有三个数组

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

但我没有得到任何东西,但仍然不知道如何以正确的方式显示条形图,以及这是否是我想做的事情的正确方法。

万一,非常感谢你的帮助。

1 个答案:

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

它有效。