第五章 变量间关系可视化
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
diamonds
是R中ggplot2包内置的经典数据集,记录了约 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集中在20,wt的集中趋势较为明显;散点图:展示了两个变量之间的原始数据点;分布地毯图(Rug Plot):在坐标轴边缘显示的数据分布密度;线性拟合线:显示两个变量之间的线性趋势关系;际图(Marginal Plot):在顶部和右侧显示的边缘分布直方图或密度图。
心得:
1.使用专业可视化库:像Seaborn这样的高级可视化库可以简化这种复合图形的创建;
2.分层构建:先创建基础散点图,再逐步添加其他元素;
3.参数调整:需要仔细调整各元素的透明度、颜色等参数以确保可读性;
4.数据预处理:确保数据格式正确,处理缺失值。
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 图形观察和代码编写的心得体会
图形观察:wt与disp的相关性较强,qsec与wt的相关性最弱。ggpairs图形:创建了一个散点图矩阵,展示数据框中各变量间的两两关系;对角线上可能是变量的密度分布图;上三角区域使用密度图展示变量分布;可视化分层构建:先创建基础图形(ggpairs):再通过
+
操作符逐步添加主题元素:最后添加相关系数矩阵。心得体会:
1.数据准备简洁高效:df <- data |> dplyr::select(-c(“cyl”,“vs”,“am”,“gear”,“carb”)) 使用管道操作符和dplyr的select函数高效地排除了不需要的变量
2.可视化分层构建:先创建基础图形(ggpairs),再通过+操作符逐步添加主题元素,最后添加相关系数矩阵
3.主题定制精细:theme(axis.title=element_text(size=8)) + theme(axis.text=element_text(size=6)) 精确控制了坐标轴标签和刻度的字体大小
4.统计信息完整:ggCor(df, method=1, digits=4, label=3, mode=2, xangle=15) 显示了精确到4位小数的相关系数及p值,提供了丰富的统计信息
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 图形观察和代码编写的心得体会
图形观察:
钻石重量和钻石价格呈现线性分布
心得体会:
1.模块化编程:p <- ggplot(df,aes(x=carat,y=price)) + theme_bw() + theme(panel.grid=element_blank()) 先创建基础图形对象,后续通过添加图层派生出不同变体,避免代码重复。
2.专业可视化技术:geom_hex()六边形分箱适合大数据集stat_density_2d()提供灵活的二维密度估计,多种几何对象组合创造丰富可视化
3.视觉优化:移除网格线减少视觉干扰,设置适当的透明度(alpha=0.8),控制等高线粗细(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散点图代码
wt hp mpg
Mazda RX4 2.620 110 21.0
Mazda RX4 Wag 2.875 110 21.0
Datsun 710 2.320 93 22.8
Hornet 4 Drive 3.215 110 21.4
Hornet Sportabout 3.440 175 18.7
Valiant 3.460 105 18.1
5.3 气泡图代码
5.4 图形观察和代码编写的心得体会
图形观察:车子越重,燃油效率越高
心得体会:
1.多维数据编码:aes(x=hp,y=mpg,color=wt)在一个图形中同时展示了四个维度的数据,有效利用了视觉编码的多种渠道
2.视觉优化技巧:alpha=0.5缓解了重叠点问题scale_size(range=c(1,7))精心控制了气泡大小范围scale_color_binned()使用分箱颜色更易区分
3.图形注释清晰:r annotate(“text”,x=300,y=30,label=“气泡大小 = 车重”,size=4) 直接说明视觉编码含义,提高图形可读性
4.``主题定制精细:控制网格线、标题大小、图例文本样式,移除冗余图例(guides(size="none"))。
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 图形观察和代码编写的心得体会
图形观察:车子越重,效率越低。
心得体会:
1.数据预处理:df <- data |> mutate(cyl=factor(cyl)),将数值变量转化为因子,确保正确分组和颜色映射。
2.分面技术应用:facet_grid(~cyl,scale=“free_x”)有利于清晰分离不同组别的数据,并且
free_x
允许各面板x轴自适应数据范围。3.统计图层叠加:stat_smooth()函数的运用,可以直接添加回归分析和置信区间,增强图形解读性;
4.视觉编码多样性:scale_shape_manual()函数有利于选择不同形状,提高组别辨识度。
5.主题精细控制:面板间距调整(
panel.spacing
);图例位置控制(legend.position
);颜色调板选择(scale_color_brewer
)