【问题标题】:Binary column sums into percentage stacked bar chart in ggplot二进制列总和成ggplot中的百分比堆积条形图
【发布时间】:2020-02-24 18:45:21
【问题描述】:

我已尽一切努力将 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)

我知道这很简单,但如果有任何帮助,我将不胜感激!!!

【问题讨论】:

  • 我会先尝试汇总数据,然后使用geom_col,如下例所示。对我来说,这比 ggplot 中的 ..count.. 调用更容易控制和理解。

标签: r ggplot2 graphing


【解决方案1】:

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

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)

【讨论】:

  • 是的!在这种情况下,虽然 ID 是什么意思?这意味着 5 列,我是否要创建一个名为“ID”的新对象来包含这些列?
  • 那么,您希望 ID 作为 x 轴,y 将是每列的总和? stength 呢?你能稍微精确一下你想要实现什么样的条形图吗?
  • 是的,就像你在上面所做的那样,我想要 x 轴上的那些列,“Bycatch_retention”等。我进行了编辑并在上面包含了一个更清晰的示例数据集。当我尝试您的代码时,我收到“-x 中的错误:一元运算符的无效参数”——我认为这是因为我需要编辑数据本身?
  • 我相应地编辑了我的答案。让我知道它是否适合您。
  • 我认为您需要先根据值进行排序,然后再按此顺序修复因子水平。这里有很多帖子我解决了这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 2019-09-27
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 2019-06-07
相关资源
最近更新 更多