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

如何用Pyplot为DataFrame散点图添加LLOC_ID列作为颜色图例?

解决方法

要实现按LLOC_ID(注意你代码里写的是LOCA_ID,和表格列名不一致,需要统一)区分颜色并添加图例,你可以通过分组遍历+Matplotlib手动绘制的方式实现,或者用更便捷的Seaborn工具。下面是两种可行方案:

方案一:纯Matplotlib实现(贴合你的需求)

先修正列名不一致的问题,然后按LLOC_ID分组,为每个分组分配不同颜色并绘制散点,最后生成图例:

import pandas as pd
import matplotlib.pyplot as plt

# 你的数据加载代码(确保列名统一为LLOC_ID)
# LOCA = AGS4.convert_to_numeric(tables['ISPT'])
# df = pd.DataFrame(LOCA)
# 用示例数据模拟你的DataFrame
df = pd.DataFrame({
    'LLOC_ID': ['BH02', 'BH01', 'BH01', 'BH04'],
    'ISPT_TOP': [1.5, 1, 1, 2.5],
    'ISPT_MAIN': [40, 50, 10, 12]
})

# 为每个LLOC_ID分配唯一颜色
color_map = {'BH01': 'red', 'BH02': 'blue', 'BH04': 'green'}

plt.figure(figsize=(8,6))

# 遍历分组绘制散点
for loc_id, group in df.groupby('LLOC_ID'):
    plt.scatter(group['ISPT_MAIN'], group['ISPT_TOP'], 
                c=color_map[loc_id], marker='o', label=loc_id)

# 反转y轴(和你原代码逻辑一致)
plt.gca().invert_yaxis()

# 添加图例和标签
plt.legend(title='LLOC_ID')
plt.xlabel('ISPT_MAIN')
plt.ylabel('ISPT_TOP')
plt.title('ISPT_MAIN vs ISPT_TOP (colored by LLOC_ID)')

plt.show()

方案二:用Seaborn简化操作

如果不介意引入Seaborn库,代码会更简洁,它会自动处理颜色映射和图例生成:

import seaborn as sns
import matplotlib.pyplot as plt

# 数据加载部分同前
# df = ...

plt.figure(figsize=(8,6))
sns.scatterplot(data=df, x='ISPT_MAIN', y='ISPT_TOP', 
                hue='LLOC_ID', marker='o')

plt.gca().invert_yaxis()
plt.legend(title='LLOC_ID')
plt.xlabel('ISPT_MAIN')
plt.ylabel('ISPT_TOP')
plt.title('ISPT_MAIN vs ISPT_TOP (colored by LLOC_ID)')

plt.show()

关键注意点

  1. 列名统一:你代码里的LOCA_ID和表格中的LLOC_ID必须保持一致,否则会出现列不存在的错误,记得修正。
  2. 动态颜色映射:如果LLOC_ID的类别很多,不用手动定义颜色,可以用Matplotlib内置色板自动生成,比如plt.cm.get_cmap('tab10')。
  3. 图例自定义:通过plt.legend()可以调整图例的位置、标题等样式,满足可视化需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:12:09