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
相关产品推荐
相关产品推荐

