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

如何基于双数据集按聚类组批量绘制同色坐标点

嘿,我来帮你优化这个绘图方案!原来循环所有46个cluster确实有点冗余——毕竟很多cluster可能根本没有对应的数据点。我们可以通过合并数据集+按cluster分组绘图的方式来高效实现需求,代码更简洁,运行也更高效,还能完美满足你同一cluster用同色绘制的要求。

具体实现步骤

  1. 合并两个数据集:把df1的经纬度数据和df2的cluster分组信息通过id关联起来,这样每个经纬度点都能带上对应的cluster标签。
  2. 构建颜色映射:为每个存在的cluster分配唯一颜色,确保同一cluster的所有点颜色一致。
  3. 分组绘图:按cluster分组,遍历每个组绘制对应的经纬度点,自动把同属一个cluster的id(比如1531和14318)的点用同色展示。

完整代码示例

import pandas as pd
import matplotlib.pyplot as plt

# 先构造你提供的示例数据(实际使用时替换成你的真实数据即可)
df1 = pd.DataFrame({
    'id_first': [403, 403, 1249, 1249, 1249, 1531, 1531, 14318],
    'latitude': [45.0714, 45.0739, 45.0745, 45.1067, 45.1062, 45.1088, 45.1005, 45.1047],
    'longitude': [7.6187, 7.6195, 7.6152, 7.6451, 7.6482, 7.6528, 7.6155, 7.6056]
})

df2 = pd.DataFrame({
    'id_now': [403, 1249, 1531, 14318],
    'cluster_group': [0, 1, 3, 3]
})

# 1. 合并数据集:通过id关联,确保每个经纬度点都有cluster标签
merged_df = pd.merge(df1, df2, left_on='id_first', right_on='id_now', how='left')

# 2. 为每个存在的cluster分配颜色
unique_clusters = merged_df['cluster_group'].unique()
# 用matplotlib内置的区分度高的colormap,也可以自定义颜色
cmap = plt.get_cmap('tab10')
color_map = {cluster: cmap(i) for i, cluster in enumerate(unique_clusters)}

# 3. 分组绘制散点图
plt.figure(figsize=(10, 6))
for cluster, group in merged_df.groupby('cluster_group'):
    plt.scatter(
        x=group['longitude'], 
        y=group['latitude'], 
        color=color_map[cluster],
        label=f'Cluster {cluster}',
        s=60,
        alpha=0.8
    )

# 添加图表装饰
plt.xlabel('Longitude', fontsize=12)
plt.ylabel('Latitude', fontsize=12)
plt.title('Geographic Points Grouped by Cluster', fontsize=14)
plt.legend(fontsize=10)
plt.grid(True, alpha=0.3)
plt.show()

方案优势

  • 高效性:只循环实际存在数据的cluster,不需要遍历46个可能为空的cluster,节省计算资源;
  • 准确性:自动将同属一个cluster的不同id(比如1531和14318)的点归为一组,用同色绘制,完全符合你的需求;
  • 可维护性:代码逻辑清晰,后续如果要调整颜色、点的样式,只需要修改对应参数即可。

可选自定义优化

如果你想使用自己指定的颜色,只需要替换颜色映射部分的代码:

# 自定义颜色列表,数量要不少于unique_clusters的数量
custom_colors = ['#FF6B6B', '#4ECDC4', '#45B7D1']
color_map = {cluster: custom_colors[i] for i, cluster in enumerate(unique_clusters)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:19:31