繁体   English   中英

使用 ggplot2 的堆叠条形图 - 数据可视化

[英]Stacked barplot using ggplot2 - data visualisation

我对 R 的经验很少,正在尝试使用 ggplot2 制作堆叠的条形图。 我有 2 组 - 控制组和实验组,以及 2 个选择 - 红色和绿色。 我不确定如何组织我的数据。

我的试验中有 80 只动物(对照 n=40,实验 n=40),它们可以选择红色和绿色底物,我记下它们选择了哪种底物,这就是我试图绘制的数据。

我基本上想要 x 轴上的“实验”和“控制”,以及 y 轴上的选择数量(例如,控制、红色 n=20、控制、绿色 = 12 等)。

任何帮助,将不胜感激!

编辑添加:

这是它输出的图形

这是我正在使用的代码(包括建议的调整):

 df <- data.frame(group = rep(c("control", "experimental"), each = 40), substrate = sample (c("red","green"), 80, TRUE)) ggplot(df, aes(x = group, y = substrate, fill = substrate)) + geom_bar(stat = "identity") + scale_fill_manual(values = c("red", "green"))

这是输出:

structure(list(group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("control", "experimental"
), class = "factor"), substrate = structure(c(1L, 2L, 1L, 2L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 
2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 
1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L), .Label = c("green", 
"red"), class = "factor")), class = "data.frame", row.names = c(NA, 
-80L))

df(behaviour) 的输出 - 原始数据帧

structure(list(group = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Control", "Experimental"
), class = "factor"), substrate = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Green", 
"Red"), class = "factor")), class = "data.frame", row.names = c(NA, 
-80L))


您可以拥有这样的数据,每个观察(即每只动物)占一行,并为每个记录记录组和基质:

df <- data.frame(group = rep(c("control", "experimental"), each = 40),
                 substrate = rep(c("green", "red", "green", "red"), c(10, 30, 27, 13)))

现在使用ggplot定义您的绘图,将group指定为您的 x 轴,并将..count..作为您的 y 轴。 使用geom_bar获取您要查找的堆叠条,最后使用scale_fill_manual设置颜色:

library(ggplot2)

ggplot(df, aes(x = group, y = ..count.., fill = substrate)) + 
  geom_bar(colour = "black") +
  scale_fill_manual(values = c("green", "red"))

在此处输入图片说明

您的数据:

behaviour=structure(list(group = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Control", "Experimental"
), class = "factor"), substrate = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Green", 
"Red"), class = "factor")), class = "data.frame", row.names = c(NA, 
-80L))

我们可以将您的数据制成表格:

 table(behaviour$group,behaviour$substrate)                           
               Green Red
  Control         10  30
  Experimental    27  13

所以你只能用geom_bar 指定fill 或y。 在您的情况下,您指定填充, geom_bar()函数将为您进行计数:

ggplot(behaviour,aes(x=group,fill=substrate))+
geom_bar() + scale_fill_manual(values=c("#29c7ac","#c02739"))

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM