第五章 变量间关系可视化

Author

学号+姓名

1 解释原始数据

1.1 mtcars

  • mtcars 是R自带的数据集,该数据集摘自 1974年《美国汽车趋势》杂志,包括32款汽车(1973~74款)的油耗、汽车设计和性能等共11个指标。根据该数据集绘制本次练习图形。
  • 指标解释:cyl、vs、am、gear和carb作为因子变量,其余可看作数值变量。

    • mpg: 燃油效率(英里/加仑),数值越高越省油。

    • cyl: 发动机气缸数(4/6/8缸),缸数越多通常动力越强。

    • disp: 发动机排量(立方英寸),排量越大动力越强,油耗越高。

    • hp: 发动机马力(马力),数值越高动力越强。

    • drat: 后轴传动比(比值),影响加速和燃油经济性。

    • wt: 车重(千磅),重量轻的车通常更省油。

    • qsec: 1/4英里加速时间(秒),时间越短动力越强。

    • vs: 发动机类型(0=V型,1=直列),V型多见于高性能车。

    • am: 变速器类型(0=自动,1=手动),手动挡通常更省油。

    • gear: 前进挡位数(3/4/5挡),挡位多可能更平顺省油。

    • carb: 化油器数量(1-8个),数量多可能提升动力。

1.2 diamonds

  • diamondsRggplot2包内置的经典数据集,记录了约 54,000 颗钻石的物理属性和价格信息。数据集包含 10 个变量,4个分类变量,6个数值变量。
  • 指标解释:cut、color、clarity为因子变量,其余可看作数值变量。
    • carat: 钻石重量,单位是克拉(1克拉=0.2克),数值越大钻石越大越贵。
    • cut: 切工质量,分为5个等级:Fair(一般)、Good(良好)、Very Good(很好)、Premium(优质)、Ideal(完美),切工越好钻石光泽越强。
    • color: 颜色等级,从D(无色,最佳)到J(浅黄色),颜色越接近无色价值越高。
    • clarity: 净度等级,分为8级:I1(内含物明显)、SI1-SI2(小内含物)、VS1-VS2(极小内含物)、VVS1-VVS2(极微小内含物)、IF(内部无瑕),净度越高钻石越纯净。
    • depth: 总深度百分比(%),计算公式为z/(x+y)/2*100,影响钻石的光反射效果。
    • table: 台面宽度百分比(%),指钻石顶部平面相对于平均宽度的比例,影响钻石的外观比例。
    • x: 钻石长度(毫米),物理尺寸之一。
    • y: 钻石宽度(毫米),物理尺寸之一。
    • z: 钻石高度(毫米),物理尺寸之一。
    • price: 钻石价格(美元),反映其综合价值,受carat、cut、color、clarity等因素影响。

2 两变量散点图

2.1 绘图要求

  • 利用ggplot(data,aes(x,y))+geom_point()绘制燃油效率(mpg,横轴)和车重(wt,纵轴)两个变量的散点图;

  • 利用geom_rug()为横轴和纵轴绘制地毯图;

  • 利用stat_smooth()为散点图添加拟合直线;

  • 利用geom_point()为散点图添加均值点;

  • 利用ggMarginal(type="densigram") 为散点图添加边际核密度直方图;

  • 利用ggtitle() 将图标题改为散点图+地毯图+线性拟合+边际图

2.2 作图代码

2.3 图形观察和代码编写的心得体会

2.3.1 图形观察:

  1. 负相关趋势:散点图显示 mpg(燃油效率)与 wt(车重)呈明显负相关,即车重越轻,燃油效率越高。红色拟合直线强化了这一趋势。
  2. 分布特征
    • 地毯图(geom_rug())表明 mpg 多集中在 15-25,wt 集中在 2.5-4.5。
    • 边际核密度直方图(ggMarginal())显示 mpg 右偏,wt 接近正态分布。
  3. 均值点位置:蓝色三角形标记的均值点位于拟合线附近,验证了线性关系的合理性。

2.3.2 代码编写心得:

  1. 模块化设计:通过 + 叠加图层(如 geom_point()stat_smooth()),逻辑清晰且易于扩展。
  2. 高效统计stat_smooth(method = "lm") 自动拟合直线,避免手动计算。
  3. 边际图简化ggMarginal() 一行代码添加分布图,提升可视化信息量。
  4. 可读性优先:注释和分步骤编写(如先基础散点图,再逐步添加元素)增强代码维护性。

核心收获:ggplot2 的图层思想与扩展包(如 ggExtra)结合,能以简洁代码实现专业可视化,关键在于平衡信息传达与图形简洁性。

3 散点图矩阵和相关系数矩阵图

3.1 绘图要求

  • 利用GGally::ggpairs(columns)绘制除cyl、vs、am、gear和carb外6个变量的散点图矩阵;

  • 修改参数upper=list(continuous = "density") ,将上三角图形改为二维核密度等高线图;

  • 利用ggiraphExtra::ggCor() 绘制除cyl、vs、am、gear和carb外6个变量的相关系数矩阵图。

3.2 散点图矩阵

3.3 相关系数矩阵图代码

3.4 图形观察和代码编写的心得体会

3.4.1 图形观察

  1. 散点图矩阵
    • 下三角散点图直观展示变量间关系,如mpg与wt呈现明显负相关趋势
    • 上三角核密度图通过等高线清晰显示变量联合分布密度
    • 对角线单变量密度曲线揭示各变量的分布特征
  2. 相关系数矩阵
    • 颜色梯度与数值结合,一目了然呈现相关性强弱
    • 如mpg与wt的深红色块(r=-0.87)表示强负相关
    • hp与disp的深蓝色块(r=0.79)表示强正相关

3.4.2 代码心得

  1. 高效探索
    • ggpairs()一键生成多维关系矩阵,极大提升探索效率
    • 参数化设计(upper/lower/diag)实现图形灵活配置
  2. 可视化优化
    • 核密度图替代散点图,有效解决数据重叠问题
    • 相关系数矩阵将抽象数值转化为直观色彩
  3. 实践价值
    • 两种图形优势互补,全面覆盖数据探索需求
    • 简洁的代码实现专业级可视化效果

总结:通过合理选择可视化工具和参数设置,既能快速把握数据特征,又能深入分析变量关系,体现了R语言在数据探索中的强大优势。

4 大数据集的散点图

4.1 绘图要求

  • 利用diamonds数据,绘制carat: 钻石重量price: 钻石价格两个变量的散点图;

  • 利用geom_hex(bins=30,size=0.3,color="black"),将散点图转化为六边形分箱散点图;

  • 利用stat_density_2d(geom="raster",aes(fill=..density..),contour=FALSE) ,将散点图转化为二维核密度图;

  • 利用geom_density_2d() ,在散点图上添加核密度等高线;

  • 利用geom_density_2d_filled(alpha=0.8) ,对核密度等高线区域填充颜色。

4.2 六边形分箱散点图

4.3 二维核密度图

4.4 散点图+密度等高线

4.5 散点图+密度等高线带

4.6 图形观察和代码编写的心得体会

4.6.1 图形观察

  1. 散点图:克拉与价格呈非线性正相关,高克拉区域价格离散度大。
  2. 六边形分箱图:低克拉(<1.5)区域密度最高,价格集中(<5000)。
  3. 核密度图:高密度区(黄色)集中在低克拉/低价区,大克拉数据稀疏。
  4. 等高线图:低克拉区等高线密集,高克拉区分散,反映数据分布不均。

4.6.2 代码心得

  1. 数据:直接使用 diamonds 数据集,适合密度分析。
  2. 绘图
    • 分层叠加(如散点+等高线)提升表现力。
    • 六边形分箱和核密度解决散点重叠问题。
  3. 优化
    • 采用 viridis 配色,清晰美观。
    • 分步绘图后组合(grid.arrange),便于调整。
  4. 改进:大数据时可采样或调整分箱数/带宽以平衡效率与细节。

总结:多角度可视化揭示非线性关系,代码需兼顾准确性、效率与可读性。

5 3D散点图和气泡图

5.1 绘图要求

  • 绘制hp发动机马力、mpg燃油效率和wt车重三个变量的 3D 散点图和气泡图。

  • 采用scatterplot3d(x=hp,y=wt,z=mpg)绘制3D散点图,并添加回归平面。

  • 采用ggplot(df,aes(x=hp,y=mpg,color=wt,size=wt)) 绘制气泡图

5.2 3D散点图代码

5.3 气泡图代码

5.4 图形观察和代码编写的心得体会

5.4.1 图形观察

  1. 3D散点图
  • 直观呈现hp、wt与mpg的三维关系,可见马力越大或车重越重,燃油效率越低
  • 红色回归平面清晰显示三个变量的联合线性趋势
  1. 气泡图
  • 通过气泡大小和颜色(黄小→红大)双重编码车重数据
  • 明确展示出:大马力+重车=低效率(右下红大泡),小马力+轻车=高效率(左上黄小泡)

5.4.2 代码心得

  1. 工具选择
  • scatterplot3d适合空间关系初探,配合回归平面强化趋势解读
  • ggplot气泡图用二维平面巧妙展示三维数据,避免3D图形的视角局限
  1. 视觉优化
  • 气泡图通过size/color映射第三维度,alpha参数解决重叠问题
  • 颜色梯度(scale_color_gradient)和大小范围(scale_size)提升可读性
  1. 分析效率
  • 3D图与气泡图优势互补,10行内代码即可完成专业级多维分析
  • 回归平面(lm模型)快速验证变量间线性假设

总结:两种可视化方式各有所长,3D图全局把控,气泡图聚焦细节,配合使用能全面把握复杂变量关系。代码简洁但通过参数微调可适应不同分析场景。

6 分组散点图

6.1 绘图要求

  • 以气缸数(cy1)为因子,绘制车重(wt)和燃油效率(mpg)的分组散点图,添加回归直线;

  • 利用facet_grid(~cy1,scale="free_x") ,按因子变量分面;

  • 利用ggplot(data=df,aes(x=wt,y=mpg,shape=cyl,color=cyl)) ,按形状和颜色分组

6.2 按因子变量分面代码

  • 注意分组变量cyl需要转化为因子

6.3 按形状和颜色分组代码

6.4 图形观察和代码编写的心得体会

6.4.1 图形观察

  1. 气缸数与燃油效率的关系

    • 4缸车最轻且最省油(mpg 20-35),8缸车最重且最耗油(mpg 10-20),6缸居中。

    • 所有分组的回归直线均呈下降趋势,表明车重增加会降低燃油效率。

  2. 分面效果

    • 通过 facet_grid 分面,不同气缸数的数据分布更清晰,避免了因数据范围差异导致的图形压缩问题。

6.4.2 代码编写心得

  1. 数据预处理是关键

    • cyl 转换为因子(factor),确保分组正确,避免被误判为连续变量。
  2. ggplot2 的分层逻辑清晰

    • 先定义数据映射(aes),再叠加几何对象(geom_pointgeom_smooth),最后调整分面和主题,逻辑流畅。
  3. 细节提升可读性

    • 通过颜色和形状双编码分组变量,图例置顶,避免遮挡数据,标题和轴标签明确,使图表一目了然。