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

如何用Matplotlib为DataFrame散点图按Layer字段着色并添加图例

按Layer着色散点图并添加对应图例的解决方案

这里给你两种可行的解决方案,都能完美实现按层着色并生成对应图例的需求:

方法一:Matplotlib原生分组绘制

手动按layer分组,为每个组单独绘制散点并指定标签,这样matplotlib就能自动生成对应图例:

#Import Libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

#Create Data
data = {'y': [1,2,3,4,5,6,7,8,9,10],
        'x': [1,2,3,4,5,6,7,8,9,10],
        'layer' : ['a','a','a','b','b','b','c','c','c','c']}
df=pd.DataFrame(data)

# 获取所有唯一的层名称
unique_layers = df['layer'].unique()
# 自动生成对应数量的颜色(用viridis配色,也可以手动指定颜色列表)
colors = plt.cm.get_cmap('viridis', len(unique_layers))

# 遍历每个层,绘制散点并设置对应标签
for idx, layer in enumerate(unique_layers):
    # 筛选当前层的数据
    subset = df[df['layer'] == layer]
    # 绘制散点,指定颜色和标签
    plt.scatter(subset['x'], subset['y'], color=colors(idx), label=layer)

# 添加图例、坐标轴标签
plt.legend(title='Layer')
plt.xlabel('孔隙度')
plt.ylabel('深度')
plt.show()

方法二:用Seaborn简化操作

Seaborn的scatterplot可以直接通过hue参数指定分组列,自动完成着色和图例生成,代码更简洁:

#Import Libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns  # 导入seaborn库

#Create Data
data = {'y': [1,2,3,4,5,6,7,8,9,10],
        'x': [1,2,3,4,5,6,7,8,9,10],
        'layer' : ['a','a','a','b','b','b','c','c','c','c']}
df=pd.DataFrame(data)

# 直接用hue参数按layer分组着色
sns.scatterplot(data=df, x='x', y='y', hue='layer', palette='viridis')

# 添加标签和调整图例
plt.xlabel('孔隙度')
plt.ylabel('深度')
plt.legend(title='Layer')
plt.show()

为什么之前的方法没生成正确图例?

如果直接给plt.scatter()的c参数传颜色列表,matplotlib只会把颜色当成数值映射,无法识别每个颜色对应的layer类别,自然生成不了对应图例。而上面两种方法都是明确把每个layer作为独立的绘图对象并指定标签,或者用Seaborn的分组逻辑,就能让图例和类别正确关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:27:20