You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制DataFrame多列折线图并自定义标记、颜色、线宽及优化代码

多折线图重复代码简化最佳实践

你的现有代码可以正常运行,想要缩短代码长度、优化写法的需求,最适合的方案是配置表+循环的写法,这也是这类多系列同逻辑绘图的通用最佳实践,既符合你想用循环实现的思路,还能大幅提升代码可维护性。


优化思路说明

你原来的代码存在大量重复逻辑:手动赋值10个y变量、重复写10次plt.plot调用,这类固定规则的重复逻辑完全可以用循环替代,同时把每个折线的差异化参数统一整理成配置表,后续调整参数也不需要修改绘图逻辑。

顺便修正了你原有代码的2个低级错误:

  1. Africa和Middle East两个系列错误绑定了同一列y9的数据
  2. 列名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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:45:00