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

matplotlib中如何批量绘制axvspan垂直高亮区间

批量绘制刺激时段高亮的实现方法

ax.axvspan()本身不支持直接传入数组参数批量绘制,你可以直接使用matplotlib原生的ax.broken_barh()方法实现和ax.vlines()一致的数组传参批量绘制效果,不需要逐行手写区间,也不需要写显式for循环。

修改后的完整代码

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


df=pd.read_csv('file.csv')

fig, ax = plt.subplots(figsize=(15,5))
df.plot(ax=ax)

# 批量绘制刺激起始竖线
ax.vlines(np.arange(0, len(df), 30*50), 0, 1, transform=ax.get_xaxis_transform(), colors='r', alpha=0.5)

# 一次性批量绘制所有刺激高亮区域
stim_start_points = np.arange(0, 15000, 3000) # 对应5次刺激的起始时间:0/3000/6000/9000/12000
stim_duration = 1500
# 生成格式为(起始x, 持续时长)的段数组
stim_intervals = np.column_stack([stim_start_points, np.full(len(stim_start_points), stim_duration)])
ax.broken_barh(
    stim_intervals,
    yrange=(0, 1),
    transform=ax.get_xaxis_transform(),
    color='red',
    alpha=0.4
)

# 修复原代码里未定义变量activity的笔误
ax.set_xlim([0, len(df)])
ax.set_ylabel('Normalised Intensity (a.u)')
ax.set_xlabel('Time (s)')
plt.show()

参数说明

  • stim_intervals为形状(n, 2)的numpy数组,每一行对应一个高亮段的起始横坐标和持续时长,完全可以通过numpy逻辑批量生成,后续调整刺激数量、间隔、时长时只需要修改生成数组的参数即可,不需要逐段改动绘图代码
  • 传入transform=ax.get_xaxis_transform()搭配yrange=(0,1),可以保证高亮区域始终铺满整个y轴方向,不会随数据的y轴范围变化出现高度错位,效果和逐行调用axvspan完全一致
  • 颜色、透明度等样式参数只需要配置一次,会自动应用到所有高亮段上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:36:22