You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制标记区分原始数据集、颜色区分聚类的散点图并去除重复色条

解决聚类散点图冗余色条问题

要解决重复显示三个色条的问题,核心是让所有散点共享同一套颜色映射规则,并仅绘制一次色条,具体实现步骤如下:

关键思路

重复色条的根源是每次绘制不同原始数据集的散点时,都独立生成了颜色映射并调用了colorbar()。只需统一颜色配置,在所有散点绘制完成后仅生成一次色条即可。

示例代码实现

import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
import pandas as pd

# 假设已完成数据集合并与聚类,得到包含以下字段的merged_df:
# - 特征列(如x、y)
# - source:标识原始数据集('df_1_3'/'df_5_1'/'df_5_5')
# - cluster:AgglomerativeClustering输出的聚类标签

# 1. 定义标记与颜色映射
marker_map = {'df_1_3': 'o', 'df_5_1': 's', 'df_5_5': '^'}  # 不同数据集用不同标记
n_clusters = merged_df['cluster'].nunique()
cmap = plt.get_cmap('viridis', n_clusters)  # 聚类颜色映射

# 2. 在同一轴上绘制所有散点
fig, ax = plt.subplots(figsize=(8, 6))
# 遍历每个原始数据集,共享颜色映射范围
for source, group in merged_df.groupby('source'):
    scatter = ax.scatter(
        group['x'], group['y'],
        marker=marker_map[source],
        c=group['cluster'],
        cmap=cmap,
        vmin=merged_df['cluster'].min(),  # 统一颜色最小值
        vmax=merged_df['cluster'].max(),  # 统一颜色最大值
        label=source
    )

# 3. 仅绘制一次色条
cbar = plt.colorbar(scatter)
cbar.set_label('聚类类别')

# 4. 添加图例与标签
ax.legend(title='原始数据集')
ax.set_xlabel('特征X')
ax.set_ylabel('特征Y')
ax.set_title('聚类结果可视化')

plt.show()

核心注意事项

  • 所有散点必须共享相同的颜色映射(cmap)和颜色范围(vmin/vmax),确保同一聚类标签对应相同颜色。
  • 仅在所有散点绘制完成后,调用一次plt.colorbar(),传入任意一个散点对象即可生成统一的色条。
  • 避免为每个数据集单独创建子图或重复调用colorbar(),这是产生冗余色条的常见原因。

内容的提问来源于stack exchange,提问作者HarryKane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:20:07