二进制列总和为ggplot中的百分比堆积条形图
Binary column sums into percentage stacked bar chart in ggplot
我已尽一切努力将 从 y 轴上的 COUNT 转换为 y 轴上的 PERCENT OF TOTAL (N=142),但似乎无法弄清楚。我希望 x 轴是列 "Spatial_Management"、"Landing_ban" 和 "Bycatch_rentention",y 轴是此列值为 1 的策略的百分比。并且填充为"Strength"。我想我需要事先对我的数据进行非常简单的编辑,我已经在下面尝试过但它不起作用。
编辑:示例数据框:
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)
我已尽一切努力将
编辑:示例数据框:
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)