首页 > 解决方案 > Ggplot - 如何呈现第三个变量的平均值?

问题描述

假设我有这个数据框:

数据框

我想制作一个图表,显示每个 SES(社会经济地位)的女性平均收入是多少,男性的平均收入是多少。

到目前为止,我有这段代码:

ggplot(incomeSorted, aes(GENDER)) +
  scale_y_continuous("Mean")+
  geom_bar(position = "dodge")+
  facet_wrap("SES")

这是输出:

在此处输入图像描述

如何使图表显示收入的平均值,而不是计算每个类别的女性和男性人数?

提前谢谢!

标签: rggplot2

解决方案


如果你想显示平均收入,你必须计算它。您可以使用dplyrand group_by()withsummarise()来获取关键变量,然后进行绘图。这是任务的代码:

library(ggplot2)
library(dplyr)
#Data
df <- data.frame(id=1:8,Gender=c(rep('Female',4),rep(c('Male','Female'),2)),
                 income=c(73,150,220.18,234,314.16,983.1,1001,1012),
                 SES=c('Bottom','Bottom','Middle','Middle','Middle',
                       'Upper','Upper','Upper'),
                 stringsAsFactors = F)
#Compute and plot
df %>% group_by(SES,Gender) %>%
  summarise(MeanIncome=mean(income,na.rm=T)) %>%
  ggplot(aes(x=Gender,y=MeanIncome)) +
  scale_y_continuous("Mean")+
  geom_bar(stat = 'identity')+
  facet_wrap(.~SES)

输出:

在此处输入图像描述

或者您可以避免分面并使用fill如下变量显示图:

#Code 2
df %>% group_by(SES,Gender) %>%
  summarise(MeanIncome=mean(income,na.rm=T)) %>%
  ggplot(aes(x=Gender,y=MeanIncome,fill=SES)) +
  scale_y_continuous("Mean")+
  geom_bar(stat = 'identity',position = position_dodge2(0.9,preserve = 'single'))

输出:

在此处输入图像描述


推荐阅读