如何为含4个属性及1个聚类标签的数据集绘制Scatter Plot
4属性+独立聚类标签的散点图绘制方案
你可以通过以下两类方案实现需求:
方案1:多视觉通道映射的2D/3D散点图
无需降维即可保留全部4个属性的原始值,同时单独标注聚类标签,通过不同的视觉属性承载不同维度的信息:
- 2D散点图映射规则:
- x轴:第1个属性
- y轴:第2个属性
- 点的大小:第3个属性(需提前做0-1归一化后放大到10-100的像素区间,避免点尺寸差异过大)
- 点的透明度/饱和度:第4个属性
- 点的颜色/形状:聚类标签
- 3D散点图映射规则:
- x/y/z轴:前3个属性
- 点的大小/透明度:第4个属性
- 点的颜色:聚类标签
2D散点图实现代码示例:
import matplotlib.pyplot as plt import pandas as pd from sklearn.preprocessing import MinMaxScaler # 读取数据集 df = pd.read_csv("你的数据集路径.csv") # 归一化处理用于映射尺寸、透明度的属性,避免视觉效果异常 scaler = MinMaxScaler(feature_range=(10, 100)) df['point_size'] = scaler.fit_transform(df[['属性3的列名']]) df['point_alpha'] = scaler.fit_transform(df[['属性4的列名']]) / 100 # 透明度取值范围为0-1 plt.figure(figsize=(10, 6)) # 按聚类标签分组绘图,不同聚类用不同颜色区分 for cluster_label in df['聚类标签列名'].unique(): sub_df = df[df['聚类标签列名'] == cluster_label] plt.scatter(sub_df['属性1的列名'], sub_df['属性2的列名'], s=sub_df['point_size'], alpha=sub_df['point_alpha'], label=f"聚类{cluster_label}") plt.xlabel("属性1") plt.ylabel("属性2") plt.legend() plt.show()
方案2:高维属性降维后可视化
如果不需要保留每个属性的原始轴含义,仅需要展示样本间的分布关系和聚类效果,可先将4个属性降为2/3维后绘图:
- 常用降维方法:PCA(线性降维,保留数据全局结构)、t-SNE(非线性降维,优先保留局部聚类结构)
- 映射规则:降维得到的2/3个维度作为散点图坐标轴,点的颜色对应聚类标签,也可额外通过点大小映射某一个原始属性的数值
t-SNE降维可视化实现代码示例:
import matplotlib.pyplot as plt import pandas as pd from sklearn.manifold import TSNE # 提取4个属性列 feature_cols = ["属性1", "属性2", "属性3", "属性4"] feature_data = df[feature_cols].values # 降为2维 tsne = TSNE(n_components=2, random_state=42) reduce_data = tsne.fit_transform(feature_data) plt.figure(figsize=(10, 6)) scatter = plt.scatter(reduce_data[:, 0], reduce_data[:, 1], c=df['聚类标签列名'], cmap="tab10") plt.legend(handles=scatter.legend_elements()[0], labels=[f"聚类{i}" for i in df['聚类标签列名'].unique()]) plt.xlabel("t-SNE维度1") plt.ylabel("t-SNE维度2") plt.show()
内容的提问来源于stack exchange,提问作者Hassan Ashas
相关产品推荐
相关产品推荐

