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

Python散点图图例显示异常求助:4类颜色图例无法完整展示

问题解决:散点图无法正常显示分类图例

你当前遇到的问题有两个核心原因:

  1. plt.legend('FTypes')的调用方式错误——matplotlib会把字符串拆分成单个字符作为图例标签,因此只会显示第一个字符"F";
  2. 使用c=df['FTypes'].map(cdict)传入数值型颜色映射时,pandas/matplotlib不会自动生成对应类别的图例,需要手动创建图例条目。

解决方案

以下是修改后的完整代码,采用明确的颜色映射+手动创建图例的方式:

import pandas as pd
from matplotlib import pyplot as plt
from matplotlib.lines import Line2D

# 绑定数据集
df = dataset

# 改用明确的颜色字典(方便匹配图例,也可替换成你需要的颜色)
cdict = {
    'Type1': 'tab:blue',
    'Type2': 'tab:orange',
    'Type3': 'tab:green',
    'Type4': 'tab:red',
}

fig, ax = plt.subplots()
# 绘图时指定ax对象,用color参数传入分类颜色
dataset.plot(kind='scatter', 
             x='Delta', 
             y='Class', 
             color=df['FTypes'].map(cdict),
             ax=ax
)

# 手动创建图例条目:用Line2D模拟散点标记
handles = [
    Line2D([0], [0], marker='o', color='w', markerfacecolor=cdict[typ], markersize=10, label=typ)
    for typ in cdict.keys()
]
# 添加带标题的图例
ax.legend(handles=handles, title='FTypes')

# 调整布局
plt.tight_layout()
# 添加参考线
plt.axvline(x=0)

plt.show()

补充说明(若坚持使用数值型颜色映射)

如果你需要保留原有的数值到颜色的映射(比如使用matplotlib的色阶),可以通过色标对象获取对应颜色来创建图例:

cdict = {
    'Type1':2,
    'Type2':4,
    'Type3':6, 
    'Type4':8,
}

# 获取当前色标和归一化对象
norm = plt.Normalize(min(cdict.values()), max(cdict.values()))
cmap = plt.cm.viridis  # 默认色阶,可替换为你需要的色标

# 创建匹配数值的图例条目
handles = [
    Line2D([0], [0], marker='o', color='w', markerfacecolor=cmap(norm(val)), markersize=10, label=typ)
    for typ, val in cdict.items()
]
ax.legend(handles=handles, title='FTypes')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:13:10