ggplot2中按组的百分比条形图

时间:2020-05-18 12:45:05

标签: ggplot2 percentage geom-bar

因此,我已经进行了搜索,但是找不到ggplot中的条形图解决此问题的方法。 我试图使条形图成为分组变量2中每组病例总数的百分比。

现在,我可以看到计数的数目,

数据框 =尽快

分组变量1-cc_groups (在图表顶部) (以0到100的分数计算范围内(20个步骤)的病例数。)

分组变量2-尽快 (具有干预或控制的二元变量,控制和干预的数量不相同)

初始代码

``` r
ggplot(ASAP, aes(x = asap, fill = asap)) + geom_bar(position = "dodge") + 
    facet_grid(. ~ cc_groups) + scale_fill_manual(values = c("red", 
    "darkgray"))
#> Error in ggplot(ASAP, aes(x = asap, fill = asap)): could not find function "ggplot"
```

reprex package(v0.3.0)于2020-05-19创建

这为我提供了下图,它是每个子组中计数的可视化显示。

enter image description here

我已经手动计算了实际需要可视化的不同百分比:

table_groups <- matrix(c(66/120,128/258,34/120,67/258,10/120,30/258,2/120,4/258,0,1/258,8/120,28/258),ncol = 2, byrow = T)
colnames(table_groups) <- c("ASAP","Control")
rownames(table_groups) <- c("0-10","20-39","40-59","60-79","80-99","100")


         ASAP  Control
0-10  0.55000 0.496124
20-39 0.28333 0.259690
40-59 0.08333 0.116279
60-79 0.01667 0.015504
80-99 0.00000 0.003876
100   0.06667 0.108527

当我使用下面Stefan提供的解决方案时(这是一个很好的答案,但没有实际的技巧。我得到以下输出

    ``` r
ASAP %>% count(cc_groups, asap) %>% group_by(cc_groups) %>% mutate(pct = n/sum(n)) %>% 
    ggplot(aes(x = asap, y = pct, fill = asap)) + geom_col(position = "dodge") + 
    facet_grid(~cc_groups) + scale_fill_manual(values = c("red", 
    "darkgray"))
#> Error in ASAP %>% count(cc_groups, asap) %>% group_by(cc_groups) %>% mutate(pct = n/sum(n)) %>% : could not find function "%>%"
```

<sup>Created on 2020-05-19 by the [reprex package](https://reprex.tidyverse.org) (v0.3.0)</sup>

enter image description here

而(当我进行模拟时)id喜欢它来显示上述百分比。

enter image description here

我对此表示抱歉。:)和reprex不断给我提供错误信息,请确保即时消息使用不正确。

1 个答案:

答案 0 :(得分:0)

最简单的方法是在绘图前汇总数据,即手动计算计数和百分比:

library(ggplot2)
library(dplyr)

ASAP %>% 
  count(cc_groups, asap) %>% 
  group_by(asap) %>% 
  mutate(pct = n / sum(n)) %>%   
  ggplot(aes(x = asap, y = pct, fill=asap)) + 
  geom_col(position="dodge")+
  facet_grid(~cc_groups)+
  scale_fill_manual(values = c("red","darkgray"))

使用ggplot2::mpg作为示例数据:

library(ggplot2)
library(dplyr)

# example data
mpg2 <- mpg %>% 
  filter(cyl %in% c(4, 6)) %>% 
  mutate(cyl = factor(cyl))

# Manually compute counts and percentages
mpg3 <- mpg2 %>% 
  count(class, cyl) %>% 
  group_by(class) %>% 
  mutate(pct = n / sum(n)) 

# Plot 
ggplot(mpg3, aes(x = cyl, y = pct, fill = cyl)) +
  geom_col(position = "dodge") +
  facet_grid(~ class) +
  scale_fill_manual(values = c("red","darkgray"))

reprex package(v0.3.0)于2020-05-18创建