如何绘制DataFrame多列折线图并自定义标记、颜色、线宽及优化代码
多折线图重复代码简化最佳实践
你的现有代码可以正常运行,想要缩短代码长度、优化写法的需求,最适合的方案是配置表+循环的写法,这也是这类多系列同逻辑绘图的通用最佳实践,既符合你想用循环实现的思路,还能大幅提升代码可维护性。
优化思路说明
你原来的代码存在大量重复逻辑:手动赋值10个y变量、重复写10次plt.plot调用,这类固定规则的重复逻辑完全可以用循环替代,同时把每个折线的差异化参数统一整理成配置表,后续调整参数也不需要修改绘图逻辑。
顺便修正了你原有代码的2个低级错误:
- Africa和Middle East两个系列错误绑定了同一列y9的数据
- 列名
Middle-East和绘图label的对应问题
优化后完整代码
import matplotlib.pyplot as plt # 全局绘图配置统一前置 plt.rcParams['font.sans-serif'] = 'Calibri' plt.rcParams['axes.edgecolor'] = '#333F4B' plt.rcParams['axes.linewidth'] = 0.8 fig, ax = plt.subplots(figsize=(16,9)) # 核心:所有折线的参数配置表,后续增删改系列只要调整这个列表即可 line_configs = [ {"col": "OECD", "marker": "", "color": "#89FAB4", "linewidth": 3, "label": "OECD"}, {"col": "BRICS", "marker": "", "color": "#FAE4A0", "linewidth": 2, "label": "BRICS"}, {"col": "Europe", "marker": "+", "color": "#FA837D", "linewidth": 1, "label": "Europe"}, {"col": "North America", "marker": "o", "color": "#B049E3", "linewidth": 2, "label": "North America"}, {"col": "Latin America", "marker": "", "color": "#E3BA5F", "linewidth": 2, "label": "Latin America"}, {"col": "Asia", "marker": "", "color": "#E35E54", "linewidth": 2, "linestyle": "dashed", "label": "Asia"}, {"col": "Pacific", "marker": "", "color": "#6591EA", "linewidth": 1, "label": "Pacific"}, {"col": "Africa", "marker": "", "color": "#EB83C6", "linewidth": 1, "label": "Africa"}, {"col": "Middle-East", "marker": "", "color": "#EB1551", "linewidth": 1, "label": "Middle East"}, {"col": "CIS", "marker": "", "color": "#1802F4", "linewidth": 1, "label": "CIS"}, ] x_series = df_cont_cons["Year"] # 循环完成所有折线绘制,无需重复写plot逻辑 for config in line_configs: ax.plot( x_series, df_cont_cons[config["col"]], marker=config.get("marker", ""), color=config["color"], linewidth=config["linewidth"], linestyle=config.get("linestyle", "solid"), label=config["label"] ) ax.tick_params(axis='x', rotation=90) ax.legend() fig.tight_layout(pad=3) fig.suptitle('Power Generated by Renewable Energy sources (TWh)', fontsize=22, y=1.02, color='#A2BDF2') plt.show()
该写法的优势
- 代码长度直接缩减60%以上,完全消除无意义的重复变量定义和重复函数调用
- 可维护性极强:后续需要调整某个折线的样式、增删折线,只要修改配置表即可,不需要改动绘图逻辑
- 避免索引对应错误:直接用列名取数,不会出现原来手动数iloc索引对应错误的问题
- 是Python数据可视化领域的通用写法,适配所有多系列同逻辑绘图场景
内容的提问来源于stack exchange,提问作者JamesArthur
相关产品推荐
相关产品推荐

