如何绘制一维K-means聚类结果散点图并关联聚类标签
首先你可以直接用样本索引作为x轴取值,通过matplotlib内置的颜色映射参数直接关联聚类标签实现分组配色,具体实现代码和说明如下:
完整实现代码
# 导入依赖库 import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans # ---- 你原有聚类代码 ---- kmeans = KMeans(n_clusters=2, random_state=123) kmeans.fit(X2) label = kmeans.fit_predict(X2) # ---------------------- # 生成x轴:每个样本对应的索引序号 x_axis = np.arange(len(X2)) # 方法1:自动按标签配色,代码更简洁 plt.scatter(x_axis, X2, c=label, cmap="Set1") plt.xlabel("样本序号") plt.ylabel("X2取值") plt.title("2簇K-means聚类结果散点图") # 配置图例 handles = [ plt.Line2D([], [], marker='o', color='w', markerfacecolor=plt.cm.Set1(0), markersize=10, label='簇0'), plt.Line2D([], [], marker='o', color='w', markerfacecolor=plt.cm.Set1(1), markersize=10, label='簇1') ] plt.legend(handles=handles) plt.show() # 方法2:手动拆分数据分别绘制,可自由指定每个簇的样式 plt.figure() # 按聚类标签拆分样本 cluster0_x = x_axis[label == 0] cluster0_y = X2[label == 0] cluster1_x = x_axis[label == 1] cluster1_y = X2[label == 1] # 分别绘制两个簇 plt.scatter(cluster0_x, cluster0_y, c="steelblue", label="簇0") plt.scatter(cluster1_x, cluster1_y, c="darkorange", label="簇1") plt.xlabel("样本序号") plt.ylabel("X2取值") plt.title("2簇K-means聚类结果散点图") plt.legend() plt.show()
参数说明
- x轴选择:因为你的X2是一维向量,没有第二个特征维度,直接用样本的索引作为x轴即可,每个点对应你输入的19个样本中的一个,逻辑清晰易于对应
- 标签关联与配色:
scatter函数的c参数直接传入聚类得到的label数组,matplotlib会自动为不同标签的点分配不同颜色,cmap参数可自定义配色方案,可选viridis、coolwarm等官方预设配色 - 手动拆分的方式更灵活,可以单独调整每个簇的点大小、形状、颜色等样式,适配不同的可视化需求
内容的提问来源于stack exchange,提问作者JCV
相关产品推荐
相关产品推荐

