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

如何为子图中时间序列与滚动均值线条设置不同颜色?

解决子图中时间序列与滚动均值线条独立设色的问题

我明白你遇到的困扰了——直接在子图的plot()里设置color参数,会让该子图里所有线条都继承这个颜色,没法分别给原始序列和滚动均值指定不同色调对吧?其实解决思路很简单:给每条单独的线条在绘制时单独指定颜色,而非在子图层面统一设置。

下面给你一个具体的实现示例,假设你的数据集是df,我们要为每一列生成独立子图,其中第二列(gym)的原始序列用紫色,滚动均值用红色,其他子图也可以自定义不同的颜色组合:

import matplotlib.pyplot as plt
import pandas as pd

# 先计算滚动均值(这里以窗口大小7为例,可根据需求调整)
rolling_df = df.rolling(window=7).mean()

# 创建子图布局:行数等于数据列数,列数为1,共享x轴让时间序列对比更清晰
fig, axes = plt.subplots(nrows=len(df.columns), ncols=1, figsize=(10, 6*len(df.columns)), sharex=True)

# 定义每个列对应的颜色对(原始序列色,滚动均值色),第二组对应gym的紫色+红色
color_pairs = [
    ('deepskyblue', 'darkorange'),  # 第一列的颜色组合
    ('purple', 'red'),              # 第二列(gym)的颜色组合,完全匹配你的需求
    ('forestgreen', 'saddlebrown'), # 第三列的颜色组合,可自由修改
    # 更多列的颜色对可以继续添加
]

# 遍历每个子图、数据列和对应的颜色对
for ax, col, (color_raw, color_roll) in zip(axes, df.columns, color_pairs):
    # 绘制原始时间序列,单独指定颜色
    ax.plot(df.index, df[col], color=color_raw, label=f'{col} 原始序列')
    # 绘制滚动均值,指定另一种颜色
    ax.plot(rolling_df.index, rolling_df[col], color=color_roll, label=f'{col} 滚动均值')
    # 添加子图标题和图例,提升可读性
    ax.set_title(f'{col} 时间序列与滚动均值')
    ax.legend()

# 自动调整子图间距,避免标题和标签重叠
plt.tight_layout()
plt.show()

核心逻辑说明:

  • 没有在子图对象ax上统一设置颜色,而是在每次调用plot()时,通过color参数单独指定当前线条的颜色,这样原始序列和滚动均值就能拥有完全独立的色调。
  • color_pairs列表可以根据你的需求自由扩展,每一组对应一个数据列的两种线条颜色,完全满足你“子图中线条颜色各不相同”的要求。
  • 使用sharex=True让所有子图共享x轴,既节省图表空间,也让不同列的时间序列对比更直观。

如果是用seaborn等其他库绘图,思路也是一致的:分别调用绘图函数,给每个线条单独传入颜色参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:30:00