首页 文章

R barplot的两个分类变量

提问于
浏览
0

我有一个数据框,我感兴趣的是两个分类变量Type和Location之间的关系,Type有5个级别,Location有20个级别 .

我想绘制每个位置的类型百分比 . 我想知道是否有使用 ggplot2 的简洁方法吗?

在我的情况下,x轴上的变量有20个级别,所以我也遇到间距问题,任何帮助将不胜感激

EDIT: 一个更具体的例子:

df
   gender beverage
1  Female     coke
2    Male     bear
3    Male     coke
4  Female     bear
5    Male      tea
6    Male     bear
7  Female    water
8  Female      tea
9  Female     bear
10   Male      tea

我想绘制每种饮料的性别明智百分比,例如:有3个喝茶的人,其中2个是男性,1个是女性,因此男性%将是66.67,女性百分比将是33.33所以在x轴上对应于茶应该是两个男性,男性,y = 66.67,女性,y = 33.33 .

1 回答

  • 3

    最简单的方法是预处理,因为我们必须按性别分别计算百分比 . 我使用 complete 确保我们在data.frame中明确显示零百分比条,否则 ggplot 将忽略该条并扩大其他性别的条形 .

    library(dplyr)
    library(tidyr)
    df2 <- df %>% 
      group_by(gender, beverage) %>% 
      tally() %>% 
      complete(beverage, fill = list(n = 0)) %>% 
      mutate(percentage = n / sum(n) * 100)
    
    ggplot(df2, aes(beverage, percentage, fill = gender)) + 
      geom_bar(stat = 'identity', position = 'dodge') +
      theme_bw()
    

    enter image description here

    或者反过来说:

    df3 <- df %>% 
      group_by(beverage, gender) %>% 
      tally() %>% 
      complete(gender, fill = list(n = 0)) %>% 
      mutate(percentage = n / sum(n) * 100)
    
    ggplot(df3, aes(beverage, percentage, fill = gender)) + 
      geom_bar(stat = 'identity', position = 'dodge') +
      theme_bw()
    

    enter image description here

相关问题