首页 > 解决方案 > 没有将 y 轴值加在一起的堆积条形图 (ggplot2)

问题描述

尝试创建一个堆叠条形图,其中 y 轴上的深度(以米为单位)和 x 轴上的不同类别,然后填充丰度值。但是,ggplot2 不断对所有深度值 (a+b+c) 求和,因此 y 轴不正确。

我知道我需要指定 geom_bar(stat = "identity"),但这似乎与 y 轴混淆,因为所有组都具有相同的值,但丰度不同。

##Data: 
Phylum  Depth   Abundance
Cnidaria    110 6
Cnidaria    90  12
Cnidaria    70  1
Cnidaria    50  4
Cnidaria    30  3
Cnidaria    20  1
Cnidaria    120 13
Cnidaria    80  3
Cnidaria    60  12
Arthropada  110 105
Arthropada  90  493
Arthropada  70  23
Arthropada  50  3
Arthropada  30  10
Arthropada  20  42
Arthropada  120 57
Arthropada  80  3
Arthropada  60  7

##Current plot: 
ggplot(data = data, aes(x = Phylum, y = Depth, fill = Abundance)) +
  geom_bar(stat = "identity")

当前绘图输出 y 轴总和为 600 m 的数据,而最大值应仅为 120 m。

标签: rggplot2bar-chart

解决方案


好事是我不认为是你的代码给你带来了麻烦。相反,我认为您可能需要考虑另一种显示数据的方式。

data = data.frame("Phylum" = c("Cnidaria", "Cnidaria", "Cnidaria", "Cnidaria","Cnidaria", "Cnidaria", "Cnidaria", "Cnidaria", "Cnidaria", "Arthropada", "Arthropada", "Arthropada", "Arthropada", "Arthropada", "Arthropada", "Arthropada", "Arthropada", "Arthropada"), "Depth" = c(110, 90, 70, 50, 30, 21, 120, 80, 60, 110, 90, 70, 50, 30, 20, 120, 80, 60), "Abundance" = c(6, 12, 1, 4, 3, 1, 13, 3, 12, 105, 493, 23, 3, 10, 42, 57, 3, 7))

之所以看起来像调整了y轴,是因为数值基本一致,用类别的平均值表示:

aggregate(.~Phylum, data, mean)

      Phylum    Depth Abundance
1 Arthropada 70.00000 82.555556
2   Cnidaria 70.11111  6.111111

当你切换深度和丰度时,你会得到一个更类似于你所期望的情节:

p = ggplot(data = data, aes(x = Phylum, y = Abundance, fill = Depth))
p+geom_bar(stat = "identity")

您可能需要考虑不同的情节。例如,您可以通过在 x 或 y 轴上使用 Abundance 和 Depth,然后填写 Phylum 类别来获得更好的信息。


推荐阅读