Python散点图图例显示异常求助:4类颜色图例无法完整展示
问题解决:散点图无法正常显示分类图例
你当前遇到的问题有两个核心原因:
plt.legend('FTypes')的调用方式错误——matplotlib会把字符串拆分成单个字符作为图例标签,因此只会显示第一个字符"F";- 使用
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
相关产品推荐
相关产品推荐

