如何为Pandas .plot传递颜色列表绘制多列折线图?
动态绘制DataFrame多列折线图(同轴+统一配色)
完全明白你的需求——要根据DataFrame的列数动态生成折线,用subplots预留同轴添加其他图表的空间,还得保持配色统一对吧?直接给你完整的实现方案:
首先,我们把代码写全,包含动态配色、折线绘制,还有后续添加同色系图表的示例:
import pandas as pd import matplotlib.pyplot as plt # 示例DataFrame(这里模拟3列的情况,验证动态适配) df = pd.DataFrame(index=range(1,6), columns=['a','b','c']) df['a'] = [1,1,1,1,1] df['b'] = [5,5,5,5,5] df['c'] = [3,3,3,3,3] # 创建画布和轴(用subplots方便后续添加其他图表) fig, ax = plt.subplots(figsize=(8,5)) # 动态生成颜色列表:根据列数截取预设颜色,避免越界 colour_list = ['r', 'b','g','y','m','c'][:len(df.columns)] # 绘制所有列的折线图,指定轴和颜色 df.plot(ax=ax, color=colour_list, linewidth=2) # 示例:在同轴上添加同色系的散点图(验证颜色一致性) for idx, col in enumerate(df.columns): ax.scatter(df.index, df[col]+0.2, color=colour_list[idx], s=50, label=f'{col} scatter') # 调整图表样式 ax.set_title('Dynamic Multi-column Line Chart with Consistent Colors') ax.legend() plt.tight_layout() plt.show()
关键细节说明:
- 动态配色:
colour_list[:len(df.columns)]会自动根据DataFrame的列数截取对应数量的颜色,不管你是2列、3列还是更多,都不会出现颜色不够的问题(如果列数超过预设的6种颜色,你可以扩展colour_list里的颜色值,比如加入'k'(黑色)、'orange'等)。 - 同轴绘制:通过
df.plot(ax=ax)把所有折线绑定到同一个轴上,这也是你用subplots的核心目的——方便后续在同一个轴上叠加其他图表(比如上面示例里的散点图)。 - 颜色一致性:后续添加其他图表时,只需要循环
colour_list里的颜色,就能和折线图的颜色一一对应,保持视觉统一。
如果你的DataFrame列数会超过预设的6种颜色,推荐使用matplotlib的内置调色板,生成更多区分度高的颜色:
# 用内置调色板生成动态颜色 colour_list = plt.cm.tab10.colors[:len(df.columns)]
这样不管列数怎么变,都能完美适配啦!
内容的提问来源于stack exchange,提问作者doctorer
相关产品推荐
相关产品推荐

