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

如何通过循环修改折线图指定时间区间的颜色?

折线图多时间区间的颜色修改实现

问题描述

我需要修改折线图中部分区域的颜色,现有原始时间序列DataFrame如下:

{'ICP': {0: 5.070969052803593,
  1: 5.4817961734227065,
  2: 6.397815732226121,
  3: 6.0582909835985195,
  4: 6.305368037683179,
  5: 5.913004902475054,
  6: 6.108737887168982,
  7: 5.80118107371289,
  8: 6.7867417878010965,
  9: 5.088879690164107},
 'Timestamp': {0: Timestamp('2020-12-16 10:04:00'),
  1: Timestamp('2020-12-16 10:05:00'),
  2: Timestamp('2020-12-16 10:06:00'),
  3: Timestamp('2020-12-16 10:07:00'),
  4: Timestamp('2020-12-16 10:08:00'),
  5: Timestamp('2020-12-16 10:09:00'),
  6: Timestamp('2020-12-16 10:10:00'),
  7: Timestamp('2020-12-16 10:11:00'),
  8: Timestamp('2020-12-16 10:12:00'),
  9: Timestamp('2020-12-16 10:13:00')}}

已绘制该DataFrame的折线图,同时存在一个包含时间区间的DataFrame:

{'BeginDate': {0: Timestamp('2020-12-16 10:04:00'),
  14: Timestamp('2020-12-17 03:53:00'),
  16: Timestamp('2020-12-17 18:09:00'),
  18: Timestamp('2020-12-18 03:39:00'),
  20: Timestamp('2020-12-19 00:11:00'),
  24: Timestamp('2020-12-19 04:27:00'),
  25: Timestamp('2020-12-19 08:55:00'),
  28: Timestamp('2020-12-19 09:15:00'),
  32: Timestamp('2020-12-19 13:50:00'),
  33: Timestamp('2020-12-19 14:53:00')},
 'EndDate': {0: Timestamp('2020-12-17 03:12:00'),
  14: Timestamp('2020-12-17 18:04:00'),
  16: Timestamp('2020-12-18 03:36:00'),
  18: Timestamp('2020-12-19 00:08:00'),
  20: Timestamp('2020-12-19 04:17:00'),
  24: Timestamp('2020-12-19 08:54:00'),
  25: Timestamp('2020-12-19 09:12:00'),
  28: Timestamp('2020-12-19 13:44:00'),
  32: Timestamp('2020-12-19 14:52:00'),
  33: Timestamp('2020-12-19 18:14:00')}}

我希望为该DataFrame每行对应的时间区间,修改折线图中对应段的颜色。目前仅能绘制单个区间的着色效果,代码如下:

# The entire time series    
ax = df['ICP'].plot(figsize = (16,5), title = "ICP")
ax.set(xlabel='Dates', ylabel='ICP')
# The orange part (a row of the dataframe, between two dates)
ax = test['ICP'].plot(figsize = (16,5), title = "ICP")
ax.set(xlabel='Dates', ylabel='ICP')

请问能否通过循环或其他方法实现多区间的颜色修改?

解决方案

可以通过循环实现多区间的颜色修改,核心思路是先绘制完整的基础折线图,再遍历每个时间区间,筛选对应区间的原始数据后,在同一坐标轴上重新绘制该段数据并指定高亮颜色。

完整代码示例

import pandas as pd
import matplotlib.pyplot as plt

# 假设原始数据DataFrame为df,时间区间DataFrame为interval_df
# 将Timestamp设为索引,方便时间范围筛选
df = df.set_index('Timestamp')

# 绘制基础折线图(作为底色)
fig, ax = plt.subplots(figsize=(16,5))
df['ICP'].plot(ax=ax, color='blue', title="ICP")
ax.set(xlabel='Dates', ylabel='ICP')

# 遍历所有时间区间,绘制高亮段
highlight_color = 'orange'
for _, row in interval_df.iterrows():
    start_time = row['BeginDate']
    end_time = row['EndDate']
    # 筛选当前区间内的数据
    segment_data = df.loc[start_time:end_time]
    # 在同一轴上绘制高亮段
    segment_data['ICP'].plot(ax=ax, color=highlight_color)

plt.show()

关键说明

  • 先将原始数据的Timestamp设为索引,是为了利用Pandas的时间范围切片快速筛选区间内的数据。
  • 先绘制完整的基础折线,再叠加高亮区间,确保非高亮区域保持原始颜色,高亮区域覆盖为指定颜色。
  • 若需要不同区间使用不同颜色,可以维护一个颜色列表(如colors = ['orange', 'red', 'green']),循环时按顺序取用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:45:37