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

stacked bar chart in r for multiple data frames

很抱歉再次打扰你们,但我正在为一项简单的任务而苦苦挣扎,在寻找解决方案和浏览互联网后,我无法解决这个问题。 这是交易。我有三个数组

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

并且我想创建一个堆叠条形图,其序列为 1 到 20 沿 x(三第二列的所有可能条目)和前三列沿 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))

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

以防万一,非常感谢您的帮助。

首先让我们看看你的数据:

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" 的列。我假设您想要基于名为 "variable":

的列的填充颜色
ggplot(data = m1, aes(x = m, y = value, fill = variable))
# Error: No layers in plot

其次,什么类型的剧情?条形图?散点图?箱形图?你需要告诉 ggplot 要绘制什么。这就是错误消息告诉您的内容 - 您提供了数据但没有指示要绘制的 what。这在 ggplot2.

的任何介绍中都有介绍
ggplot(data = m1, aes(x = m, y = value, fill = variable)) +
  geom_bar()

但是现在我们得到另一个错误:

Error : Mapping a variable to y and also using stat="bin". With stat="bin", it will attempt to set the y value to the count of cases in each group. This can result in unexpected behavior and will not be allowed in a future version of ggplot2. If you want y to represent counts of cases, use stat="bin" and don't map a variable to y. If you want y to represent values in the data, use stat="identity". See ?geom_bar for examples. (Defunct; last used in version 0.9.2)

这是一个有用的错误,最好的! 如果您希望 y 代表数据中的值,请使用 stat="identity"。

ggplot(data = m1, aes(x = m, y = value, fill = variable)) +
    geom_bar(stat = "identity")

而且有效。