如何使用 geom_text 在堆叠条形图的比例尺上添加频率或数字?

Posted

技术标签:

【中文标题】如何使用 geom_text 在堆叠条形图的比例尺上添加频率或数字?【英文标题】:How to add a frequency or number on scalebar of stacked barplot using geom_text? 【发布时间】:2021-12-29 00:48:39 【问题描述】:

我是使用 Rstudio 的新手,所以我有一些问题想请教。

我想为 10 个地点的物种组成制作比例尺,并在比例尺内添加数字。

这样的结果。

我想将物种组成的频率数放在比例尺内。试过放geom_text的代码,结果一点都不合适。

我希望有一个答案来解决这个问题。非常感谢。

这是我的数据,也是我在 R 中运行的编码。

data <- as.matrix(data.frame(Bng = c(0, 0, 0, 41, 0, 9, 6, 25, 11, 2, 5, 7), 
                             Krs = c(0, 25, 0, 82, 0, 0, 0, 0, 23, 0, 0, 0),
                             Bny = c(0, 0, 0, 0, 0, 0, 0, 23, 16, 0, 10, 0),
                             Kmb = c(1, 0, 0, 0, 20, 0, 0, 25, 8, 1, 0, 0),
                             Sgk = c(0, 0, 0, 18, 0, 2, 0, 11, 0, 0, 0, 0),
                             Lwb = c(1, 0, 2, 73, 0, 5, 0, 7, 5, 0, 0, 0),
                             Lws = c(0, 0, 0, 4, 0, 0, 0, 4, 0, 4, 1, 0),
                             Krp = c(0, 0, 0, 115, 0, 0, 2, 0, 2, 0, 0, 0),
                             Hrt = c(4, 0, 0, 0, 2, 22, 0, 7, 4, 2, 3, 0),
                             Gmb = c(0, 2, 0, 42, 2, 0, 0, 1, 6, 4, 3, 0)))
rownames(data) <- c("Cbr", "Csx", "Rax", "Hdd", "Hlv", "Mst", "Mps", "Mbr", "Rfs", "Rbn", "Rct", "Rps")
data 
barplot(data)
barplot(prop.table(data, 2))```
library(reshape2)
data_long <- as.data.frame(data)
data_long$subgroup <- rownames(data_long)
data_long <- melt(data_long, id.vars = "subgroup")
library(ggplot2)
ggp <- ggplot(data_long,           
              aes(x = variable,
                  y = value,
                  fill = subgroup)) +
  geom_bar(position = "fill", stat = "identity")+
  theme_bw()+
  scale_fill_grey()
ggp                                

ggp +                              
  scale_y_continuous(labels = scales::percent_format())

【问题讨论】:

【参考方案1】:

你可以试试

library(dplyr)
data_long %>%
  group_by(subgroup) %>%
  mutate(key = sum(value),
         value = value/sum(value)
         ) %>%
  filter(value != 0) %>%
  ggplot(aes(x = variable,
           y = value,
           fill = subgroup)) +
  geom_bar(position = "fill", stat = "identity")+
  theme_bw()+
  scale_fill_grey() +                              
  scale_y_continuous(labels = scales::percent_format()) +
  geom_text(aes(label = value * key), position = position_fill(vjust = .5))

【讨论】:

天啊,非常感谢您的帮助!这对我来说意义重大。我也应该学习使用 dplyr。非常感谢!

以上是关于如何使用 geom_text 在堆叠条形图的比例尺上添加频率或数字?的主要内容,如果未能解决你的问题,请参考以下文章

在堆积条形图中反转 geom_text() (ggplot2)

R语言ggplot2可视化:ggplot2可视化水平堆叠条形图并且在每个堆叠条形图的内部居中添加百分比文本标签信息

如何使用 Seaborn 创建 FacetGrid 堆叠条形图?

带有组和构面的堆叠 ggplot 条形图的百分比标签

R语言ggplot2可视化堆叠的条形图(stacked bar plot)并在每一个条形图的的中间添加对应的数值值标签定位在geom_col堆叠的条形图中的每个条形段的中间

R语言ggplot2可视化堆叠条形图(stacked bar plot)并且在每个条形图的顶端使用数值标签表示整个条形的加和值(sum value above the stacked bar)