Matplotlib折线图图例颜色与实际线条显示不一致问题如何解决?
问题原因
代码中存在重复绘图操作,是导致图例与线条颜色不匹配的核心原因:
- 第一次执行
df.plot()时,会自动为DataFrame的3个字段绘制3条折线,同时生成对应3个字段名的图例,折线使用matplotlib默认配色序列的前3个颜色。 - 后续执行
plt.plot(df)时,会再次为同一份DataFrame的3个字段绘制3条新折线,新折线使用配色序列的第4~6个颜色,且不会更新已有图例。
最终画布上显示的是第二次绘制的3条折线,但图例仍然保留第一次绘图生成的配色对应关系,因此出现颜色错位。
解决方法
删除冗余的plt.plot(df)语句即可。修正后的完整可运行代码如下:
import pandas as pd import matplotlib.pyplot as plt d = { 'Training': [270,180,160,150,135,130,120,110,100,95], 'Validation': [290,220,200,180,170,173,175,185,188,195], 'Validation Lr Drecay': [290,220,200,180,170,170,168,166,170,175] } df = pd.DataFrame(data=d) df.plot() new_list = range(1,10) plt.xticks(new_list) plt.grid() plt.title('model accuracy') plt.ylabel('Error') plt.xlabel('Iteration') plt.show()
如果需要手动调用plt.plot()实现绘图,则需要为每条折线指定对应标签,再手动生成图例:
# 手动绘图示例 plt.plot(df['Training'], label='Training') plt.plot(df['Validation'], label='Validation') plt.plot(df['Validation Lr Drecay'], label='Validation Lr Drecay') plt.legend()
内容的提问来源于stack exchange,提问作者user2458922
相关产品推荐
相关产品推荐

