使用ggplot2进行高级绘图--分组、添加光滑曲线

 

使用ggplot2进行高级绘图--分组 

为了理解数据,在一个图中画出两个或更多组的观察值通常是很有帮助的。在R中,组通常用分类变量的水平(因子)来定义。分组是通过ggplot2图将一个或多个带有诸如形状、颜色、填充、尺寸和线类型的视觉特征的分组变量来完成的。ggplot()声明中的aes()函数负责分配变量(图形的视觉特征),所以这是一个分配分组变量的自然的地方。

用分组来探讨Salaries数据集。数据框包含的信息是在2008~2009学年大学教授的薪水。变量包括rank(助理教授、副教授、教授)、sex(女性、男性)、yrs.since.phd(获得博士学位年数)、yrs.service(工龄)和salary(以美元计的九个月薪水)。

首先查看薪水是如何随学术等级变化的。代码: 

1
2
3
4
5
6
7
data(Salaries, package="car")
 
library(ggplot2)
 
ggplot(data=Salaries, aes(x=salary, fill=rank)) +
 
  geom_density(alpha=.3)

 

结果分析:在同一幅图中画出了三条密度曲线(每条曲线代表一个学术等级)并用不同的颜色来区分。填充的设置有些透明度(alpha),使重叠曲线不掩盖彼此。颜色也相互结合来提高加入地区的可视化。薪水随着等级的增长而增长,但是重叠比较明显,比如一些助理教授与副教授或教授的薪水相同。随着学术等级的增长,薪水的范围也在扩大。对于教授而言尤其如此,他们的收入差距很大。把这三个分布放在同一幅图上方便了组间的比较。

接下来,我们通过性别和学术等级分组,绘制获得博士学位年数与薪水的关系:

1
2
3
ggplot(Salaries, aes(x=yrs.since.phd, y=salary, color=rank,
 
                     shape=sex)) + geom_point()

结果分析:学术等级用点的颜色来表示(红色代表助理教授,绿色代表副教授,蓝色代表教授)。性别用点的形状来表示(圆形代表女性,三角形代表男性)。从图中可以看出,薪水随着毕业年数的增加而增加,但是它们之间的关系绝对不是线性的。

你可以用一个分组的条形图按学术等级和性别来可视化教授的人数:

1
2
3
ggplot(Salaries, aes(x=rank, fill=sex)) +
 
  geom_bar(position="stack") + labs(title='position="stack"')

 

1
2
3
ggplot(Salaries, aes(x=rank, fill=sex)) +
 
  geom_bar(position="dodge") + labs(title='position="dodge"')

 

1
2
3
ggplot(Salaries, aes(x=rank, fill=sex)) +
 
  geom_bar(position="fill") + labs(title='position="fill"')

 

结果分析:从前两个图中可以明显看出教授的人数大于其他学术等级的人数。除此之外,女性教授的人数比女性助理教授和副教授的人数要多。第三个图表示即使女性的总数更大,但是女性教授在教授中的比重远远小于其他两组。

 

使用ggplot2进行高级绘图--添加光滑曲线

我们可以使用geom_smooth()函数来添加一系列的平滑曲线和和置信区域。函数的参数参见表。

geom_smooth()函数

 

使用Salaries数据集,我们先检验博士毕业年数和薪水之间的关系。在这个例子中,我们可以使用带有95%置信区间的非参数光滑曲线(loess)。暂时忽略性别和学术等级。代码如下

1
2
3
4
5
library(ggplot2)
 
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary)) +
 
  geom_smooth() + geom_point()

 

结果分析:图形显示经验和薪水之间不是线性的关系,至少在毕业时间很长的时候是这样。

按性别拟合一个二次多项式回归(一个弯曲):

1
2
3
4
5
6
7
8
9
ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary,
 
                          linetype=sex, shape=sex, color=sex)) +
 
  geom_smooth(method=lm, formula=y~poly(x,2),
 
              se=FALSE, size=1) +
 
  geom_point(size=2)

 

结果分析:置信界限被抑制(se=FALSE)来简化图。性别由颜色、符号形状和线条类型来区分。对男性来说,曲线从0增加至约30年然后下降。对女性来说,拟合曲线从040年一直呈上升趋势。在数据集中没有女性获得博士学位超过40年。对于数据集中的大部分范围,男性能拿到更高的薪水。

posted @   zhang-X  阅读(6415)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示