二进制列总计为ggplot中堆积的条形图的百分比

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二进制列总计为ggplot中堆积的条形图的百分比相关的知识,希望对你有一定的参考价值。

我已经尽一切努力将bar chart I made here从y轴的COUNT转换为y轴的PERCENT OF TOTAL(N = 142),但似乎无法弄清楚。我希望x轴是“ Spatial_Management”,“ Landing_ban”和“ Bycatch_rentention”列,而y轴是该列的值为1的策略百分比。并填充为“强度”。我想我需要预先做一个非常简单的编辑数据,我已经在下面尝试过了,但是没有用。

编辑:样本数据框:

    df<- data.frame(policy=c("Policy A", "Policy B", "Policy C", "Policy D", 
                     "Policy E","Policy F" ),
            Spatial_Management= c(0,1,1,0, 0,1),
            Landing_ban= c(0,1,1,0, 0,1),
            Bycatch_Retention= c(0,1,1,0, 0,1),
            Strength=c("M", "V", "M", "P", "P", "M"),
            stringsAsFactors=FALSE)

我当前的图形代码是:

df %>% 
  pivot_longer(Spatial_management:Bycatch_Retention) 
  filter(value==1) %>%
  ggplot(aes(x=factor(name, level=level_order), fill = factor(Strength)) +
                       y = (..count..)/sum(..count..)) +
 geom_bar()+
 stat_bin(geom = "text",
       aes(label = paste(round((..count..)/sum(..count..)*100), "%")),
       vjust = 5) +
 scale_y_continuous(labels = percent)

我知道这很简单,但会有所帮助!

答案

这里,您需要将数据框重整为更长的格式,然后计算值的数量除以策略的数量(此处等于您数据帧的行数):

library(tidyr)
library(dplyr)
library(ggplot2)
df %>% pivot_longer(-c(policy, Strength), names_to = "var", values_to = "val") %>%
  group_by(Strength, var) %>%
  summarise(Val = sum(val)/ nrow(df)) %>%
  ggplot(aes(x = var, y = Val, fill = Strength))+
  geom_col()+
  scale_y_continuous(labels = percent)

enter image description here

以上是关于二进制列总计为ggplot中堆积的条形图的百分比的主要内容,如果未能解决你的问题,请参考以下文章

带有facet_grid的ggplot2中带有多个分类变量的堆积条形图

堆积条形图,按总计(值的总和)重新排序,而不是值 ggplot2 + dplyr

ggplot2:3路交互堆积条形图的分组条形图

将百分比标签添加到堆积条形图ggplot2

如何将每个类别的百分比添加到堆积条形图(ggplot2)(对于“非百分比”堆积图表)

python中堆积百分比条形图的问题[重复]