第五章 变量间关系可视化

Author

221527136邹伟亮

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 图形观察和代码编写的心得体会

  • 图形观察

    • 展示了 mpg(每加仑行驶英里数)与 wt(车重)的负相关关系,符合常理:车越重,油耗越高(mpg 越低)。

    • 线性拟合线(红色)和置信带(蓝色)进一步验证了这种趋势,且置信带较窄,说明模型拟合较好。

    • 地毯图(Rug Plot):在坐标轴边缘显示数据分布,可快速看出 mpg 和 wt 的密集区间(如 mpg 集中在 15~25,wt 集中在 2.5~3.5)。

    • 均值点(黄色):标记数据的中心位置,直观对比各点与均值的偏离程度。

    • 边际密度图:通过边缘的直方图+密度曲线,补充了单变量的分布特征(如 mpg 呈右偏,wt 接近正态)。

  • 代码编写心得

    • 图层叠加逻辑清晰

    • 使用 ggplot2 的 + 运算符逐步叠加元素(散点→拟合线→均值点→标题),代码可读性强。

    • 注意:重复的 stat_smooth(method=lm) 可删除一行,避免冗余。

    • 参数灵活调整

    • 形状与颜色:通过 shape、fill、color 参数自定义点、线、填充的样式。

    • 边际图扩展:ggMarginal() 的 type=“densigram” 同时显示密度曲线和直方图,适合探索数据分布。

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 图形观察和代码编写的心得体会

  • 图形观察 GGally::ggpairs() 矩阵图分析

    对角线:显示每个变量的密度曲线,直观反映数据分布(如 mpg 右偏,wt 接近正态)。

    下三角(散点图):

    可见 mpg 与 wt、disp 呈明显负相关,符合“车越重油耗越高”的常识。

    点的透明度(alpha)设置避免了重叠掩盖趋势。

    上三角(核密度图):

    颜色深浅表示数据密集程度,例如 disp 和 hp 的高密度区集中在右上角,说明大排量车多伴随高马力。

    ggiraphExtra::ggCor() 相关系数矩阵

    颜色梯度:红色(负相关)到蓝色(正相关)清晰区分关系方向。

    数值标签:高精度(4位小数)显示相关系数,如 mpg 与 wt 的相关系数约为 -0.87,强负相关。

  • 代码编写心得

    数据预处理

    使用 dplyr::select(-c(…)) 快速排除非目标变量,代码简洁高效。

    注意:若变量名未用引号包裹,应使用 dplyr::select(-cyl, -vs, …) 语法。

    ggpairs() 灵活配置

    分区域定制:通过 lower 和 upper 参数分别控制上下三角的图形类型(如散点图+密度图组合)。

    主题优化:调整 axis.text 和 axis.title 的字体大小,避免小图标签拥挤。

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 图形观察和代码编写的心得体会

  • 图形观察

    • 六边形分箱图 (p1)

      清晰展示克拉与价格的密度关系

      主密度区:小克拉(<1.0)低价格(<5000)

      大克拉钻石价格离散

    • 二维核密度图 (p2)

      平滑显示数据分布趋势

      密度峰值:0.3克拉/1000美元附近

    • 散点图+等高线 (p3/p4)

      同时显示原始数据点和分布轮廓

      p4填充色更直观显示密度带

  • 代码心得

    使用theme_bw()+panel.grid=element_blank()简化背景

    viridis配色保证可视化可读性

    grid.arrange实现多图对比

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 图形观察和代码编写的心得体会

  • 3D散点图

    • 展示马力(hp)、车重(wt)与油耗(mpg)的关系

    • 灰色回归面显示mpg随hp/wt增加而下降

    • 蓝色网格增强立体视觉效果

  • 气泡图

    • 用气泡大小/颜色双重表示车重(wt)

    • 右上角标注说明图例

    • 简洁设计:移除次要网格线,保留核心信息

  • 代码

    • s3d$plane3d(fit) # 一键添加回归平面

    • highlight.3d=TRUE # 增强立体感

    • aes(size=wt, color=wt) # 双变量编码

    • guides(size=“none”) # 避免图例重复

    • annotate() # 精准添加注释

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 图形观察和代码编写的心得体会

  • 图形观察

    • 分面回归图:

      按气缸数(cyl)分面展示车重(wt)与油耗(mpg)的关系

      每个子图包含散点、线性回归线和置信区间

      统一红色回归线+天蓝色置信带,保持视觉一致性

    • 形状分组图:

      用不同形状(三角/圆/方)和颜色区分气缸数

      图例置于底部,清晰展示分组对应关系

      Set1配色方案提供高对比度

  • 代码心得

    数据处理技巧:

    r mutate(cyl = factor(cyl)) # 关键步骤:数值转因子

    分面图:facet_grid(~cy1)+free_x实现水平分面

    形状控制:scale_shape_manual(values=c(10,16,17))精准指定形状

    图例优化:legend.position=“bottom”统一图例位置