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

matplotlib如何通过迭代方法绘制折线图并分配正确标签

实现方法

你现有代码的核心问题是循环内label参数硬编码为固定值sales,导致所有折线图例名称一致,另外全局绘图配置需要放在绘图语句前才能生效,日期列建议先转为标准datetime格式避免x轴排序错乱。

下面分别给出两种场景的可运行实现:

场景1:单图展示所有品类折线

直接将循环遍历到的列名作为label参数传入即可自动匹配对应燃油品类:

import pandas as pd
import matplotlib.pyplot as plt

# 全局绘图参数必须放在绘图逻辑前生效
plt.rcParams["figure.figsize"] = (10, 6)
# 转换日期格式,避免x轴刻度乱序、重叠
df["Update"] = pd.to_datetime(df["Update"])

# 遍历所有燃油品类列(跳过第一列日期字段)
for fuel_type in df.columns[1:]:
    # label直接传入当前遍历到的品类名
    plt.plot(df["Update"], df[fuel_type], label=fuel_type, linewidth=3)

plt.title("Fuels price by Date")
plt.xlabel("Date")
plt.ylabel("Price (PLN)")
plt.legend()
plt.xticks(rotation=45)  # 日期标签倾斜45度避免重叠
plt.tight_layout()  # 自动调整布局防止边缘标签被截断
plt.show()

运行后图例将自动显示Pb95/Pb98/diesel/heating oil四个品类名,和折线一一对应。

场景2:分品类绘制独立子图

提前创建子图网格,通过zip将子图对象和品类列绑定后循环绘图即可:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = (12, 10)
df["Update"] = pd.to_datetime(df["Update"])
fuel_cols = df.columns[1:]

# 创建2行2列的子图网格,展平为一维数组方便遍历
fig, axes = plt.subplots(nrows=2, ncols=2)
axes = axes.flatten()

for ax, fuel_type in zip(axes, fuel_cols):
    # 随机生成折线颜色做区分,也可以自定义固定色值列表
    ax.plot(df["Update"], df[fuel_type], linewidth=3, color=np.random.rand(3,))
    ax.set_title(f"{fuel_type} Price Trend")
    ax.set_xlabel("Date")
    ax.set_ylabel("Price (PLN)")
    ax.tick_params(axis="x", rotation=45)

# 设置总图标题
fig.suptitle("Fuels price by Date", y=1.02, fontsize=15)
plt.tight_layout()
plt.show()

如果需要垂直单列排布所有子图,只需将plt.subplots参数改为nrows=len(fuel_cols), ncols=1即可。

注意事项

迭代列时建议直接使用df.columns[1:]获取列名遍历,比写死列索引范围df.iloc[:,1:6]兼容性更强,后续增删数据集列时不需要修改迭代逻辑。

内容的提问来源于stack exchange,提问作者12666727b9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:54:27