如何用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()
关键注意点
- 列名统一:你代码里的
LOCA_ID和表格中的LLOC_ID必须保持一致,否则会出现列不存在的错误,记得修正。 - 动态颜色映射:如果
LLOC_ID的类别很多,不用手动定义颜色,可以用Matplotlib内置色板自动生成,比如plt.cm.get_cmap('tab10')。 - 图例自定义:通过
plt.legend()可以调整图例的位置、标题等样式,满足可视化需求。
内容的提问来源于stack exchange,提问作者Milo
相关产品推荐
相关产品推荐

