在 r 中绘制堆叠和分组的条形图

Plotting a stacked and grouped barchart in r

我目前正在尝试在 R 中绘制一些数据,但没有真正成功。我的数据如下所示:

我的数据存储在一个名为 "Head" 的数据框中: 我的响应变量是一个只有两个水平("black" 和 "white")的因子(称为 "colour") 我的第一个(也是主要的)解释变量是一个因子(称为 "Year",具有两个水平("Year 1996" 和 "Year 2019")。 我的次要解释变量是一个因子(称为 "DateClass"),具有三个水平("A"、"B" 和 "C")。 所以数据集看起来像这样:

颜色年日期类

黑色 1996 A

黑色 2019 B

白色 1996 A

黑色 1996 C

白色 2019 B

白色 1996 B

...等等

我想绘制 "head colour" 作为 white/black 与 "Year" 和 "DateClass" 的比例。我曾想过分组条形图和黑白堆叠,但我不知道该怎么做。有什么建议么?你会将 "colour" 的堆栈绘制为百分比还是总计数?

感谢您的回答,祝好

这是您要找的吗?

数据:

df <- data.frame(Colour = c("Black", "Black", "White", "Black", "White", "White"),
                 Year = c(1996, 2019, 1996, 1996,2019, 1996),
                 DateClass = c("A", "B", "A", "C", "B", "B"))

已编辑的解决方案

首先,聚合数据得到Colourby DateClasssubsets of df by Year==2019中的比例并且,分别 Year==2019;将结果存储在 df1996df2019:

df1996 <- aggregate(
  x = df$DateClass[df$Year==1996],
  by = list(df$Colour[df$Year==1996]),
  function(x) prop.table(table(x)))

df2019 <- aggregate(
  x = df$DateClass[df$Year==2019],
  by = list(df$Colour[df$Year==2019]),
  function(x) prop.table(table(x)))

现在使用双面板布局并排绘制两个数据框:

par(mfrow = c(1,2))
barplot(df1996[,-1], cex.names = 0.8, col = c("blue","red"),
        main = "Black/White by DateClass in 1996", cex.main = 0.8,
        xlab = "1996", ylab = "Proportions")

barplot(df2019[,-1], cex.names = 0.8, col = c("blue","red"),
        main = "Black/White by DateClass in 2019", cex.main = 0.8,
        xlab = "2019", ylab = "Proportions")