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

matplotlib中scatter.legend_elements()图例显示不全如何解决

问题原因

scatter.legend_elements() 方法默认的条目数量控制参数num取值为'auto',该模式下最多只会返回9个图例元素,当分类总数超过9个时,就会出现图例仅显示前9项、剩余分类缺失的问题。

修复方法

调用legend_elements()时手动指定num参数为实际的分类总数量,强制方法返回和所有分类一一对应的图例句柄,就能展示全部分类的图例。

修改后的可运行完整代码:

import pandas as pd
import random as rd
import matplotlib.pyplot as plt

datasets = ['a', 'a', 'b', 'b', 'b', 'c', 'd', 'd', 'e', 'f', 'g','g','g','h', 'i', 'j', 'k', 'k','l','m','n','o','p','q','r','s','t','u','v']
d = {'x': [rd.random()*len(i) for i in datasets]
     , 'y': [rd.random()*len(i) for i in datasets]
     , 'source': datasets} 
df = pd.DataFrame(data=d)
fig = plt.figure()
categ = df.source.astype('category')
# 获取实际分类总数
cat_count = len(categ.cat.categories)
# 直接取分类类别作为图例标签,无需额外转字典
legend_labels = categ.cat.categories
ax = fig.add_subplot(111)
scatter = ax.scatter(df.x, df.y, c=categ.cat.codes, cmap='Set3')
plt.title("test", fontsize=18)
# 传入num参数指定生成全量图例元素
plt.legend(
    handles=scatter.legend_elements(num=cat_count)[0], 
    labels=legend_labels, 
    title="datasets"
)
plt.show()

小提示:如果全量图例条目太多遮挡绘图内容,可以在plt.legend()中追加参数bbox_to_anchor=(1.05, 1), loc='upper left',将图例放置在绘图区域外侧,避免遮挡散点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 05:21:37