Pandas绘制多折线图时legend显示错误:分组名未出现在图例中
错误原因
你直接对groupby('Name')返回的分组对象调用plot方法时,pandas会为每个分组的子数据集单独执行绘图逻辑,每个子数据集的y轴取值都是Frequency列,所以默认会把y列的列名作为对应折线的图例标签,而不会自动复用分组对应的Name列取值,最终就会出现图例全显示为Frequency的问题。
修复方案
方案1:遍历分组手动指定标签
你可以手动迭代分组对象,绘图时显式指定每个折线的label为对应的Name值:
fig, ax = plt.subplots(figsize=(10,8)) for user_name, group_data in df.groupby('Name'): group_data.plot( kind='line', x="Position", y="Frequency", ax=ax, label=user_name # 手动指定图例标签为分组的用户名 ) plt.legend(title="用户名称") # 可按需给图例添加标题 plt.show()
方案2:使用seaborn简化实现
如果接受引入seaborn库,可以直接通过hue参数自动按Name列分组绘图并生成对应图例,代码更简洁:
import seaborn as sns fig, ax = plt.subplots(figsize=(10,8)) sns.lineplot( data=df, x="Position", y="Frequency", hue="Name", # 按Name列分组着色、生成图例 ax=ax ) plt.show()
内容的提问来源于stack exchange,提问作者Math
相关产品推荐
相关产品推荐

