资深博导:你用上中下三种方法重新画一个聚类分析图,准备发NC!

文摘   2024-12-12 18:38   爱尔兰  
也许很多人有和我一样的感觉,在数据分析的过程中更喜欢“绘图”而不是分析建模结果。这是因为代码的修改可以非常直观地在图片上展现出来,而建模的结果输出结果大多都是文字和数字,需要仔细比对才可以。聚类分析是一种非常常用的无监督学习方法,它可以帮助我们发现数据中隐藏的结构和模式。因此,如何清晰、美观地展示这些结果就变得至关重要。今天的更新我们就侧重如何调用不同的包来优化R代码的美学设计,让可视化效果更有吸引力。

数据准备

使用经典的 iris 数据集作为示例。我们首先加载必要的 R 包,并对数据进行标准化处理。
data(iris)
df <- iris[, 1:4]
df_scaled <- scale(df)
接下来,我们分别使用 K-means 聚类和层次聚类两种方法。
set.seed(42)
kmeans_result <- kmeans(df_scaled, centers = 3)
hc_result <- hclust(dist(df_scaled), method = "ward.D2")

K-means 聚类可视化

使用 fviz_cluster

factoextra 包中的 fviz_cluster 函数可以快速生成漂亮的聚类图。
fviz_cluster(kmeans_result, data = df_scaled,
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
geom = "point",
ellipse.type = "convex",
ggtheme = theme_bw()
)

使用 ggplot2 自定义

虽然 fviz_cluster 很方便,但 ggplot2 提供了更高的灵活性,可以根据需要进行更精细的调整。
df$cluster <- kmeans_result$cluster
ggplot(df, aes(Sepal.Length, Sepal.Width, color = factor(cluster))) +
geom_point(size = 3) +
labs(title = "K-means Clustering", x = "Sepal Length", y = "Sepal Width", color = "Cluster") +
scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07")) +
theme_bw()

层次聚类可视化

基础树状图

R 的 plot 函数可以绘制基本的树状图。
plot(hc_result, main = "Hierarchical Clustering Dendrogram",
xlab = "Observations", sub = "", cex = 0.8)
rect.hclust(hc_result, k = 3, border = 2:4)

使用 ggdendro 和 ggplot2 美化树状图

ggdendro 包可以将 hclust 结果转换为 ggplot2 可以处理的数据格式,从而绘制更美观的树状图。
library(ggdendro)
library(ggdendro)
library(ggplot2)

# 将层次聚类结果转换为 ggdendro 格式
dendro_data <- dendro_data(hc_result)

# 绘制个性化树状图
ggplot(segment(dendro_data)) +
# 添加分支线条,并用分组颜色区分
geom_segment(aes(x = x, y = y, xend = xend, yend = yend, color = as.factor(yend > mean(y))),
size = 0.7, lineend = "round") +
# 自定义坐标轴翻转并调整比例
coord_flip() +
scale_y_reverse(expand = c(0.2, 0)) +
# 自定义颜色调色板
scale_color_manual(values = c("skyblue", "coral"), name = "Height > Mean") +
# 设置标题和轴标签样式
labs(
title = "Enhanced Hierarchical Clustering Dendrogram",
x = "Observations",
y = "Height"
) +
# 美化图形主题
theme_minimal(base_size = 14) +
theme(
axis.title.y = element_text(size = 14, face = "bold"),
axis.title.x = element_text(size = 14, face = "bold"),
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.text.y = element_text(size = 12, color = "gray20"),
axis.text.x = element_text(size = 12, color = "gray20"),
legend.position = "top",
legend.title = element_text(size = 12, face = "italic"),
legend.text = element_text(size = 10)
)

使用 dendextend 增强树状图

dendextend 包提供了更多高级的树状图定制选项,例如分支着色、调整标签大小等。
library(dendextend)
dend <- as.dendrogram(hc_result)
dend <- color_branches(dend, k = 3) # 根据聚类分组着色
dend <- set(dend, "labels_cex", 0.8) # 调整标签大小
plot(dend,
main = "Enhanced Dendrogram",
xlab = "Observations", ylab = "Height",
leaflab = "perpendicular")

结论

本文介绍了如何使用 R 语言进行聚类分析结果的可视化,涵盖了 K-means 聚类和层次聚类的常用方法,并展示了如何使用 factoextraggplot2 和 dendextend 等 R 包来增强可视化效果。希望本文能够帮助你更好地呈现和理解聚类分析的结果。
感谢关注,你的支持是我不懈的动力!

科研代码
专注R和Python的数据分析。
 最新文章