第六章 样本相似性可视化课堂练习

Author

kaka

1 案例数据

1.1 iris:鸢尾花数据集

  • R语言内置的 iris 数据集(鸢尾花数据集)是统计学和机器学习领域最经典的案例数据集之一,由英国统计学家 Ronald Fisher 在1936年首次提出。它包含了3种鸢尾花的测量数据,每个类别有50个样本,共150行数据。
变量名 数据类型 单位 说明
Sepal.Length numeric cm 花萼(萼片)长度,即花朵最外层绿色叶状结构的长度
Sepal.Width numeric cm 花萼(萼片)宽度
Petal.Length numeric cm 花瓣长度,即花朵内部彩色叶状结构的长度
Petal.Width numeric cm 花瓣宽度
Species factor - 鸢尾花种类(分类标签),包含3个水平:
setosa山鸢尾
versicolor变色鸢尾
virginica维吉尼亚鸢尾
  • setosa 类的花通常较小,花瓣短而宽,与其他两类差异明显;versicolorvirginica 在部分特征上有重叠,分类难度更高。

2 平行坐标图和雷达图

2.1 平行坐标图

  • ggplot(group=id)+geom_line+geom_point 绘图
  • Species 映射为颜色

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

  • 图形观察心得 可视化效果:该平行坐标图通过多维度可视化清晰地呈现了不同Species的数据模式差异。采用彩色线条与灰色点标记的对比设计,既保持了视觉协调性又强化了数据识别度。色彩方案实现了类别的明确区分,便于进行跨类别比较。在布局设计上,将图例置于(0.8,0.8)坐标位置,既确保信息完整呈现又避免遮挡核心数据;通过x轴标签的双行排列方式,有效解决了长标签重叠问题,提升了图表的整体可读性。这种设计组合同时兼顾了信息传达效率和视觉美观性。

  • 代码编写心得 数据处理:采用 tidyr::gather() 进行数据长宽格式转换是构建 ggplot2 可视化的重要前期准备,配合 fct_inorder 保持变量原始顺序,确保了数据结构的准确表达。

2.2 雷达图

  • 采用ggiraphExtra::ggRadar 绘图

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

  • 图形观察心得 可视化效果:雷达图非常适合展示多变量数据中各组的轮廓特征,不归一化保留了原始数据尺度,便于直接比较,透明填充使多条雷达线更清晰可辨 设计选择:蓝色坐标轴标签与雷达图线条形成良好对比,右侧图例位置合理,不干扰图形主体,点的大小适中,既突出关键点又不显突兀

  • 代码编写心得 主题定制:单独定义mytheme使代码结构更清晰,便于在多个图形间保持一致的风格 参数选择:rescale=FALSE保留了原始数据特性,alpha=0和size=2的组合创造了清晰的轮廓效果 函数使用:ggRadar()提供了简洁的雷达图创建接口,与ggplot2语法风格一致,便于扩展

3 星图和脸谱图

3.1 星图

  • 采用stars 函数,对标准化数据绘制圆弧星图

  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;

  • 设置图例在合适位置,能完整显示;将图形分为10行。

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

  • 星图主要用于 多变量数据的可视化比较,特别适用于展示 多个观测对象在多个维度上的相对表现

3.2 脸谱图

  • 采用aplpack::faces 函数,作Species 三个类别的脸谱图
  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;
  • 设置图例在合适位置,能完整显示;将图形分为3列。

effect of variables:
 modified item       Var           
 "height of face   " "Sepal.Length"
 "width of face    " "Sepal.Width" 
 "structure of face" "Petal.Length"
 "height of mouth  " "Petal.Width" 
 "width of mouth   " "Sepal.Length"
 "smiling          " "Sepal.Width" 
 "height of eyes   " "Petal.Length"
 "width of eyes    " "Petal.Width" 
 "height of hair   " "Sepal.Length"
 "width of hair   "  "Sepal.Width" 
 "style of hair   "  "Petal.Length"
 "height of nose  "  "Petal.Width" 
 "width of nose   "  "Sepal.Length"
 "width of ear    "  "Sepal.Width" 
 "height of ear   "  "Petal.Length"

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

  • 脸谱图(Chernoff Faces) 是一种基于 面部特征编码多变量数据 的可视化方法,它通过人脸的各个部位(如眼睛大小、鼻子长度、嘴巴弧度等)映射不同变量,利用人类对面部特征的敏感识别能力,帮助直观比较复杂的高维数据模式。

4 聚类图和热图

4.1 系统聚类树状图

  • 采用factoextra::fviz_dend 函数,对标准化后数据作图;
  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;
  • 要求分为3类,观察分类结果和Species 的差异;树状图的外观为圆形。

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

  • 揭示数据分组结构:通过树状图(Dendrogram)或分块热图展示样本/变量的相似性聚类结果.

4.2 K-menas聚类主成分图

  • 采用factoextra::fviz_cluster 函数,对标准化后数据作图;

  • 需要先将四个数值变量转化为矩阵,并将1:150 作为矩阵的行名;

  • 要求分为3类,类别轮廓为正态分布,观察哪些观察值比较异常。

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

  • 图形观察心得 树状图展示:圆形布局(circular)比传统矩形布局更节省空间,颜色区分明显,但k=3与4种颜色的设置不一致需要注意 聚类效果:ward.D2方法通常能产生平衡的聚类结果,矩形框和颜色填充直观展示了聚类分组 标签处理:cex=0.6适当缩小了标签大小,避免重叠color_labels_by_k=TRUE使标签颜色与聚类一致

  • 代码编写心得 数据标准化:在计算距离前进行标准化是必要步骤,确保不同量纲的变量对距离计算贡献均衡 距离和方法选择:欧式距离和ward.D2方法是经典组合,适合连续变量的聚类分析 可视化优化:fviz_dend()提供了丰富的树状图定制选项,参数设置整体合理,但颜色数量与聚类数不一致

4.3 热图

  • 采用gplots::heatmap.2 函数,对原始数据绘制热力图

  • 需要先将四个数值变量转化为矩阵,并将Species 作为矩阵的行名;

  • 要求横轴和纵轴均添加聚类树状图

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

  • 展示矩阵数据的值分布:用颜色梯度表示数值大小,适合呈现相关性矩阵、基因表达量、用户行为统计等表格型数据。

  • 识别模式与异常

    • 高/低值聚集区(如基因表达的热点区域)。

    • 行或列的局部规律(如时间序列中的周期性变化)。

  • 配合聚类:通常与行列聚类(dendrogram)叠加,揭示数据层次结构。