第五章 变量间关系可视化

Author

221527207刘润钿

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(车重)的负相关关系,线性拟合线(红色)和置信带(蓝色)强化了这一趋势。地毯图(边缘短线)直观显示单变量分布密集区。黄色均值点快速定位数据中心位置。边际密度图(灰色直方图+浅蓝填充)补充单变量分布特征。通过形状(空心圆点)、颜色对比(深天蓝/红/黄)和透明度(α=0.5)提升可读性。

  • 代码编写心得:图层叠加逻辑:ggplot2采用+逐层叠加(散点→拟合线→均值点),逻辑清晰。geom_point()的shape/fill控制点样式。stat_smooth()的method=lm快速拟合线性模型。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 图形观察和代码编写的心得体会

  • 图形观察:变量关系矩阵:通过ggpairs展示多变量间关系,对角线上方用核密度图呈现二维分布,下方默认散点图(注释中可切换)。相关系数矩阵:ggCor以半角矩阵清晰显示Pearson系数(保留4位小数),结合P值标注显著性,冷色调(默认)增强可读性。视觉优化:调整坐标轴标签(size=8)和刻度文字(size=6)避免重叠,xangle=0保持水平标签。
  • 代码编写心得:高效数据筛选:管道操作|>配合dplyr::select快速剔除无关变量(如cyl,vs等)。灵活构图:ggpairs的upper/lower参数分区域控制图形类型(如核密度vs散点)。ggCor的mode=2实现紧凑的半角矩阵,label=3自动整合统计显著性。主题精细化:通过叠加theme()逐层调整文本细节,避免全局修改冲突。

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):采用六边形网格对数据进行聚合统计。颜色深浅直观反映数据点密集程度,viridis色系(H选项)提供良好的颜色渐变和色盲友好性,黑色边框增强了每个六边形的可辨识度。二维核密度图(p2):平滑的密度估计呈现数据分布趋势,无等高线的纯色填充更突出整体分布模式,高密度区域(亮黄色)显示carat-price的主要分布区间。散点+等高线图(p3):原始散点展示数据实际分布,等高线勾勒出数据密度的层次结构,黑白配色强化了几何轮廓的视觉效果。散点+填充密度带(p4):填充色块直观显示密度分布,半透明处理(alpha=0.8)保留底层信息,黑色细等高线在填充基础上增加细节层次,移除图例使图形更加简洁。
  • 代码编写心得:使用统一的基图对象(p)确保各子图风格一致,通过theme_bw()+panel.grid=element_blank()创建简洁的画布,所有图形共享相同的aes映射(x=carat,y=price)。可视化优化:geom_hex的bins参数控制分箱粒度(此处设为30),stat_density_2d的geom=“raster”提升渲染效率,viridis色系确保颜色感知的普适性,alpha参数调节填充透明度平衡信息量。图层叠加艺术:p4中同时使用geom_density_2d_filled和geom_density_2d,通过size参数微调等高线粗细(0.25),guides(fill=“none”)移除冗余图例。大数据处理:六边形分箱和核密度估计有效解决散点过密问题,针对diamonds大数据集(5万+观测值)的优化方案。代码可读性:清晰的注释说明每个步骤的功能,分步骤构建图形对象(p1-p4),保持一致的代码风格和参数命名

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

  • 图形观察:1. 3D散点图(s3d):使用hp(马力)、wt(车重)和mpg(油耗)三个变量构建三维空间,蓝色坐标轴(col.axis=“blue”)和浅蓝色网格线(col.grid=“lightblue”)增强可读性,高亮效果(highlight.3d=TRUE)通过颜色渐变展示深度信息,垂直线段(type=“h”)辅助定位点在三维空间中的位置,图表标题清晰说明图形内容。2.气泡图(ggplot):二维平面展示hp(马力)和mpg(油耗)的关系,通过颜色和气泡大小双重编码wt(车重)变量,半透明效果(alpha=0.5)缓解重叠问题,气泡大小范围(range=c(1,7))设置合理,区分度明显,蓝色图例文字(color=“blue”)与整体风格协调,添加的注释文本明确说明气泡大小的含义。
  • 代码编写心得:1. 3D散点图实现:scatterplot3d包提供简洁的3D绘图语法,highlight.3d参数自动生成深度着色效果,type=“h”添加垂直线段,增强空间感知,合理设置坐标轴和网格线颜色提升可读性,cex.lab控制标签大小,避免文字重叠。2. 气泡图优化技巧:使用size和color双重美学映射增强信息量,scale_size精确控制气泡大小范围,scale_color_binned()对连续变量进行分箱着色,通过theme()精细调整各种文本元素大小,guides(size=“none”)隐藏冗余图例,annotate()添加说明性文本提升图表自明性。3.整体编码风格:参数命名清晰直观,分层设置图形属性,逻辑清晰,适当的注释说明关键步骤,对图形元素进行系统化调整(如文本大小、颜色等)。 # 分组散点图

5.5 绘图要求

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

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

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

5.6 按因子变量分面代码

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

5.7 按形状和颜色分组代码

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

  • 图形观察:1.分面回归图:分组展示:通过气缸数(cyl)分面,清晰展示不同组别下车重(wt)与油耗(mpg)的关系。统计辅助:每个子图配有红色回归线和天蓝色置信区间,直观显示线性趋势。视觉优化:移除图例避免冗余,自由x轴刻度适应各组数据范围,合理间距避免拥挤,分析价值:便于直接比较不同气缸数车辆的油耗-车重关系差异。2. 形状颜色分组图:双重编码:同时使用形状和颜色区分气缸数(3种形状+Set1配色方案),视觉区分:手动定义的点形状(10,16,17)与鲜明颜色形成双重辨识维度,布局设计:底部图例节省空间,标题明确说明编码方式,分析价值:在单一视图中展示整体分布模式与组间差异。
  • 代码编写心得:1.数据处理技巧:因子转换:mutate(cyl=factor(cyl))确保分类变量正确处理。管道操作:|>提升代码可读性和连贯性。2. 分面图关键点:分面语法:facet_grid(~cyl)实现横向分面,scale=“free_x”自适应x轴。统计增强:stat_smooth(method=“lm”)一键添加回归分析。间距控制:panel.spacing精细调整子图间隔.3.分组图优化技巧:美学映射:同时映射shape和color实现双重编码。视觉定制:scale_shape_manual()精确控制点形状,scale_color_brewer()调用优质配色。图例管理:底部定位图例+隐藏冗余引导(scale_alpha)4.主题一致性:系统化设置:统一控制点大小、文本元素等基础属性。意图明确:通过标题直接传达图形目的