r - Ggplot - 如何呈现第三个变量的平均值?
问题描述
假设我有这个数据框:
我想制作一个图表,显示每个 SES(社会经济地位)的女性平均收入是多少,男性的平均收入是多少。
到目前为止,我有这段代码:
ggplot(incomeSorted, aes(GENDER)) +
scale_y_continuous("Mean")+
geom_bar(position = "dodge")+
facet_wrap("SES")
这是输出:
如何使图表显示收入的平均值,而不是计算每个类别的女性和男性人数?
提前谢谢!
解决方案
如果你想显示平均收入,你必须计算它。您可以使用dplyr
and 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'))
输出:
推荐阅读
- python - 基本 Python:使用 Jupyter Notebook 的方程式和绘图不起作用
- mysql - 在 Squalize 的 FROM 子句中指定子查询
- c# - 序列化“System.Data.Entity.DynamicProxies.Item”类型的对象时检测到循环引用
- pygame - 我如何在这个 pygame 屏幕上添加一个用鼠标画线的函数
- python-3.x - 如何使用 numpy 在 Python 中定义分段函数?
- python - 在函数中循环 5 位数字的数字
- multithreading - Jmeter tearDown Thread Group 无法访问之前使用过的线程组文件
- c - 确定两个无符号 int32 的大小差异(以字节为单位)
- android - DJI 遥控器数据为空
- javascript - 为什么如果我得到计算对象中的对象属性未定义而不是对象本身?哪种方法更适合这种情况?