基于UMAP聚类结果,如何用箱线图对比各簇特征差异?
聚类簇间特征对比可视化方案
数据准备
首先需要将特征数据集与聚类归属数据合并,确保样本顺序完全匹配:
import pandas as pd # 拼接特征数据和聚类归属数据 combined_df = pd.concat([data, df_cluster], axis=1) # 将聚类列重命名为更清晰的'cluster'(可根据实际列名调整) combined_df.rename(columns={df_cluster.columns[0]: 'cluster'}, inplace=True)
箱线图绘制(Seaborn)
箱线图能直观展示各聚类簇的特征中位数、四分位数范围及异常值,适合对比离散程度:
import seaborn as sns import matplotlib.pyplot as plt sns.set_style("whitegrid") # 提取所有特征列(排除聚类标识列) feature_cols = [col for col in combined_df.columns if col != 'cluster'] # 逐个特征绘制箱线图 for feature in feature_cols: plt.figure(figsize=(8, 5)) sns.boxplot(x='cluster', y=feature, data=combined_df, palette='Set2') plt.title(f'Cluster Comparison: {feature}') plt.xlabel('Cluster') plt.ylabel(feature) plt.show()
小提琴图绘制(Seaborn)
小提琴图结合箱线图与核密度估计,能同时展示数据的统计量和分布形态:
# 逐个特征绘制小提琴图 for feature in feature_cols: plt.figure(figsize=(8, 5)) sns.violinplot(x='cluster', y=feature, data=combined_df, palette='Set2') plt.title(f'Cluster Distribution: {feature}') plt.xlabel('Cluster') plt.ylabel(feature) plt.show()
批量子图展示(可选)
如果特征数量较多,可将多个图整合到同一张画布,提升浏览效率:
import math n_features = len(feature_cols) n_cols = 2 n_rows = math.ceil(n_features / n_cols) plt.figure(figsize=(15, 5*n_rows)) for idx, feature in enumerate(feature_cols, 1): plt.subplot(n_rows, n_cols, idx) sns.boxplot(x='cluster', y=feature, data=combined_df, palette='Set2') plt.title(feature) plt.xlabel('') # 隐藏子图x轴标签避免重复 plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

