R语言统计分析——ggplot2绘图3——分组
参考资料:R语言实战【第2版】
为了理解数据,在一个图中画出两个或更多组的观察值通常是很有帮助的。在R中,组通常用分类变量的水平(因子)来定义。分组是通过ggplot2将一个或多个带有诸如形状、颜色、填充、尺寸和线类型的视觉特征的分组变量来完成的。ggplot()声明中的aes()函数负责分配变量(图形的视觉特征),通常来说,变量应该设在aes()函数内,分配常数应该在aes()函数外。
下面让我们对Salaries数据集进行探索:数据框包含的信息是在2008~2009学年大学教授的薪水。变量包括rank(助理教授、副教授、教授)、sex(女性、男性)、yrs.since.phd(获得博士学位年数)、rs.service(工龄)和salary(以美元计的九个月薪水)。
首先,我们可以查看薪水是如何随学术等级变化的。代码如下:
# 加载car包,使用里面的Salaries数据集
library(car)
# 加载ggplot2包
library(ggplot2)
# 绘图
ggplot(Salaries,aes(x=salary,fill=rank))+
geom_density(alpha=0.3)
如上图所示,在同一幅图中画出了3条密度曲线(每条曲线代表个学术等级)并用不同的颜色区分。填充的设置有些透明度(alpha),使重叠曲线不会彼此掩盖。薪水随着等级的增长而增长,但是重叠比较明显,比如一些助理教授与副教授或教授的薪水相同。随着学术等级的增长,薪水的范围也在扩大。对于教授而言尤其如此,他们的收入差距很大。把这三个分布放在同一幅图上方便了组间的比较。
接下来,我们通过性别和学术等级分组,绘制获得博士学位年数与薪水的关系:
ggplot(Salaries,aes(x=yrs.since.phd,y=salary,
color=rank,shape=sex))+
geom_point()
在上图中,学术等级用点的颜色来表示(红色代表助理教授,绿色代表副教授,蓝色代表教授),性别用形状来表示(圆形代表女性,三角形代表男性)。薪水随着毕业年数的增加而增加,但是它们之间的关系绝对不是线性的。
最后,我们可以用一个分组的条形图按学术等级和性别来进行可视化:
ggplot(Salaries,aes(x=rank,fill=sex))+
geom_bar(position="stack")+
labs(title='position="stack')
ggplot(Salaries,aes(x=rank,fill=sex))+
geom_bar(position="dodge")+
labs(title='position="dodge')
ggplot(Salaries,aes(x=rank,fill=sex))+
geom_bar(position="fill")+
labs(title='position="fill"')
注意,第三个图中的y轴标签是错误的,它应该是比例(proportion)而不是数量(count),我们可以通过添加y="proportion"参数到labs()函数中来解决,如下:
ggplot(Salaries,aes(x=rank,fill=sex))+
geom_bar(position="fill")+
labs(title='position="fill"',y="proportion")