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