也许很多人有和我一样的感觉,在数据分析的过程中更喜欢“绘图”而不是分析建模结果。这是因为代码的修改可以非常直观地在图片上展现出来,而建模的结果输出结果大多都是文字和数字,需要仔细比对才可以。聚类分析是一种非常常用的无监督学习方法,它可以帮助我们发现数据中隐藏的结构和模式。因此,如何清晰、美观地展示这些结果就变得至关重要。今天的更新我们就侧重如何调用不同的包来优化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()
层次聚类可视化
基础树状图
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 聚类和层次聚类的常用方法,并展示了如何使用 factoextra
、ggplot2
和 dendextend
等 R 包来增强可视化效果。希望本文能够帮助你更好地呈现和理解聚类分析的结果。