第五章 变量间关系可视化
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)与车重(wt)的散点图绘制过程中,我通过图形直观地观察到了两者之间的关系:数据分布:
散点图清晰地展示了数据点的分布情况,大部分数据点集中在一定的范围内,这有助于我初步了解数据的整体特征。
通过散点图,我观察到随着车重的增加,燃油效率(
mpg)似乎有下降的趋势,这符合一般认知,即车重越大,通常油耗越高。
线性关系:
添加的线性拟合线(
stat_smooth())进一步验证了我的观察,拟合线呈现出负斜率,表明车重与燃油效率之间存在负相关关系。拟合线的斜率和截距提供了关于这种线性关系强度的量化信息,有助于更深入地理解数据。
数据特征:
地毯图(
geom_rug())在横轴和纵轴上展示了数据的密集程度,帮助我识别了数据分布中的一些异常值或集中区域。均值点(红色点)直观地显示了数据的中心位置,为比较提供了基准。
边际分布:
- 边际核密度直方图(
ggMarginal())展示了mpg和wt各自的分布情况,这有助于我理解每个变量的单独特征,以及它们在整体数据集中的位置。
- 边际核密度直方图(
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.0.1 图形观察心得
散点图矩阵:
数据关系:通过散点图矩阵,我能够直观地观察多个变量之间的两两关系。例如,
mpg与wt、disp、hp等变量之间的关系可以通过散点图清晰地看到。上三角的二维核密度等高线图:二维核密度等高线图提供了比散点图更丰富的信息,展示了数据点在二维空间中的密度分布,有助于识别变量之间的潜在模式或集群。
下三角的散点图:下三角的散点图提供了直观的两两变量关系,使得可以快速识别变量之间的线性或非线性关系。
相关系数矩阵图:
相关性量化:相关系数矩阵图通过颜色和数值展示了变量之间的相关性,使得可以量化地比较不同变量之间的相关性强度。
直观展示:颜色深浅和数值大小直观地展示了变量之间的正相关或负相关,以及相关性的强弱。
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 图形观察和代码编写的心得体会
六边形分箱散点图:
数据密度:六边形分箱散点图通过六边形的颜色深浅展示了数据点的密度分布,可以清晰地看到数据集中或稀疏的区域。
视觉效果:使用
viridis颜色使得图形更加色盲友好,且颜色过渡自然,易于理解。
二维核密度图:
密度分布:二维核密度图通过颜色的深浅展示了数据点在二维空间中的密度分布,使得可以直观地看到数据点的集中区域。
平滑效果:核密度估计提供了平滑的密度分布,避免了散点图中点过多导致的视觉混乱。
散点图+密度等高线:
结合展示:散点图与密度等高线的结合展示了数据点的具体位置和密度的整体分布,等高线帮助识别数据中的高密度区域。
等高线颜色:红色的等高线使得密度高的区域更加突出,易于识别。
散点图+密度等高线带:
填充效果:密度等高线带通过填充颜色展示了不同密度级别的区域,使得密度分布更加直观。
透明度:散点图的透明度设置使得等高线带更加清晰,两者结合展示了数据的细节和整体分布。
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 散点图:
3D 散点图能够直观地展示三个变量之间的关系。
添加回归平面可以帮助理解变量之间的线性关系。
使用
scatterplot3d包可以轻松实现 3D 散点图的绘制。
气泡图:
气泡图通过气泡的大小和颜色来展示额外的信息(如车重)。
使用
ggplot2包可以灵活地调整气泡的大小、颜色和透明度。气泡图适合在二维平面上展示三个变量的关系,其中两个变量用于定位,一个变量用于气泡的大小或颜色。
代码编写:
确保加载必要的包,并正确引用数据集。
在 3D 散点图中,使用
scatterplot3d的plane3d函数可以方便地添加回归平面。在气泡图中,使用
scale_color_gradient和scale_size可以调整颜色和大小的范围。
通过这些步骤,你可以有效地绘制和观察 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 图形观察和代码编写的心得体会
分组散点图:
分组散点图通过颜色和形状的不同来区分不同的组别,使得数据在不同组别中的分布更加清晰。
添加回归直线可以帮助理解每个组别中变量之间的关系。
分面绘图:
使用
facet_grid可以将数据按因子变量分面,便于比较不同组别之间的差异。scales = "free_x"允许每个分面的 x 轴自由缩放,这对于不同组别数据范围差异较大的情况非常有用。
代码编写:
确保数据预处理步骤正确,特别是将分组变量转换为因子。
合理使用
ggplot2的图层和美学映射,可以创建出清晰且信息丰富的图形。图形主题的选择和调整可以提高图形的可读性和美观性。