Двоичные столбцы суммируются в процентах столбчатой ​​диаграммы в ggplot - PullRequest
2 голосов
/ 24 февраля 2020

Я перепробовал все, чтобы преобразовать гистограмму , которую я сделал здесь из COUNT на оси Y в PERCENT OF TOTAL (N = 142) на оси Y, но, похоже, не могу понять это , Я хотел бы, чтобы ось 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)

Я знаю, что это очень просто, но был бы признателен за любую помощь !!!

1 Ответ

2 голосов
/ 24 февраля 2020

Здесь вам нужно преобразовать ваш фрейм данных в более длинный формат, а затем посчитать количество значений, деленное на количество политик (здесь оно равно количеству строк вашего фрейма данных):

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

...