第五章 变量间关系可视化

Author

221527103纪咏琪

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.0.1 图形观察心得

可视化效果
- 多图层组合:散点图+地毯图呈现分布细节,线性拟合线强化趋势方向,边际密度图同步展示变量分布
- 非归一化处理:保留原始数据尺度,均值点直接反映真实中心位置
- 透明设计:置信带半透明处理避免遮挡散点,边际图浅色填充保持视觉平衡

设计选择
- 蓝(散点/地毯)红(拟合线)撞色形成视觉焦点,黄色均值点作为数据锚点
- 右侧边际图不挤压主图空间,轴须线仅底部显示减少干扰
- 点体大小分级(均值点>散点)自然突出重点


2.3.0.2 代码编写心得

代码结构
- 管道符(%>%)流式衔接边际图,避免嵌套结构
- 内置均值计算(mean())实现动态定位,无需外部变量
- 十六进制色值精准控制颜色/透明度(如#87CEEB80

参数技巧
- shape=21启用边框填充双色机制,linewidth参数适配新版ggplot2
- sides="b"精简轴须线显示,margins="both"明确边际图方位

函数应用
- ggMarginal()一键扩展边际图,与ggplot2原生语法无缝融合
- stat_smooth()快速叠加统计模型,alpha参数控制图层透明度层次

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 散点图矩阵

3.4.1.1 图形观察心得

  • 多维分析:散点矩阵呈现变量间关系,核密度图突显数据聚集区
  • 字段筛选:剔除冗余变量(cyl,vs等),聚焦核心分析
  • 视觉优化:默认蓝调色系统一风格,密度图色深映射数据密度

3.4.1.2 代码编写心得

  • 管道操作|>衔接数据清洗与绘图,代码连贯
  • 智能参数upper=list(continuous="density")定制子图类型,隐式保留lower=散点图
  • 扩展性ggpairs()兼容ggplot2主题系统,便于后续调整字体/配色

3.4.2 相关系数矩阵

3.4.2.1 图形观察心得

  • 交互式矩阵:半角模式(mode=2)紧凑呈现相关系数,热力色阶映射相关性强弱
  • 双信息标注:同时显示相关系数(保留4位小数)及显著性P值(label=3
  • 布局优化:x轴标签零角度旋转(xangle=0)避免文字重叠

3.4.2.2 代码编写心得

  • 快速建模ggCor()一键生成智能相关矩阵,自动计算Pearson系数
  • 参数组合label=3实现数值+P值双标签,whaw=1控制色块宽高比
  • 精度控制digits=4确保统计量显示精度,规避默认舍入误差

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.0.1 图形观察心得

  • (a) 六边形分箱:30分箱平衡粒度与噪点控制,黑色边框强化蜂窝结构
  • (b) 二维核密度:连续色阶(fill=..density..)揭示价格-克拉双变量密度分布
  • (c) 复合视图:灰点+黑色等高线(geom_density_2d)同步显示原始数据与分布轮廓
  • (d) 层级表达:半透明填充等高带(alpha=0.8)+细黑边线实现三维数据映射

4.6.0.2 代码编写心得

通用结构
- 基础模板复用:p对象整合主题设置(黑白主题+无网格),四图共享底层配置
- 色盲友好色阶:scale_fill_viridis_c(option="H")统一四图配色体系

特色参数
- 核密度精控:contour=FALSE隐藏默认等高线,geom="raster"启用像素化渲染
- 复合图层:geom_density_2d_filled+geom_density_2d实现填充与线框双效叠加
- 视图优化:guides(fill="none")删除冗余图例,size=0.25细化等高线

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 3D散点图代码

5.4.1.1 图形观察心得

  • 三维投射:垂直线(type="h")辅助空间定位,高亮渐变色(highlight.3d=TRUE)增强深度感知
  • 双变量建模:灰色回归平面(plane3d)直观展示hp/wt对mpg的联合影响
  • 轴系设计:蓝色坐标轴+浅蓝网格线(col.axis/col.grid)构建清爽三维坐标系

5.4.1.2 代码编写心得

  • 快速建模lm()拟合双变量回归,plane3d()直接投射平面到已建3D画布
  • 三维优化pch=16强化点体显示,cex.lab=0.7收缩轴标签防止拥挤
  • 视觉增强box=TRUE保持立体边框,highlight.3d自动生成Z轴渐变色

5.4.2 气泡图代码

5.4.2.1 图形观察心得

  • 双美学映射:气泡大小与颜色双通道编码wt变量,强化数据维度表达
  • 透明分层alpha=0.5缓解重叠点遮挡问题,保留原始数据分布特征
  • 分箱色阶scale_color_binned()将连续变量离散化,提升颜色辨识度

5.4.2.2 代码编写心得

  • 复合映射aes()内同步声明color=wtsize=wt,实现双视觉通道联动
  • 图例控制guides(size="none")消除冗余图例,legend.text独立设置颜色/字号
  • 精准注释annotate("text")手动添加图例说明,规避自动图例表述局限

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.0.1 图形观察心得

  • 分面策略facet_grid(~cyl)按气缸数横向分面,scale="free_x"实现各面板x轴独立标度
  • 极简设计:移除图例(legend.position="none")强化图表主体,红蓝拟合线保持跨面板一致性
  • 形状约束scale_shape_manual强制统一形状(代码1)vs 差异化形状(代码2)传递分组策略

6.4.0.2 代码编写心得

  • 分面精控panel.spacing参数微调面板间距,避免子图粘连
  • 混合映射shape=cyl+color=cyl双通道分组,scale_color_brewer调用预设色板
  • 图层叠加stat_smooth(method="lm")面板内独立拟合,fill="deepskyblue"构建置信带层次