1

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

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

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

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

4

1 回答 1

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

两个问题:首先,引用您的数据上面没有称为“行”的列。我假设您想要基于名为“变量”的列的​​填充颜色:

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

它有效。

于 2015-11-19T23:56:31.300 回答