一尘不染

如何将axvfill与布尔系列一起使用

python

我有一个布尔时间序列,我想用它来确定绘图中应加阴影的部分。

目前我有:

ax1.fill_between(data.index, r_min, r_max, where=data['USREC']==True, alpha=0.2)

其中, r_minr_max 只是y轴的最小值和最大值。

但是fill_between不会一直填充到图的顶部和底部,因为,因此我想改用 axvspan()

给定axvspan仅采用坐标,有什么简单的方法可以做到这一点?因此,我能想到的唯一方法是将所有彼此相邻且均为True的日期分组,然后将这些日期的第一个和最后一个日期传递给axvspan。

谢谢


阅读 162

收藏
2021-01-20

共1个答案

一尘不染

fill_between如果愿意,您仍然可以使用。但是,您可以在坐标轴中指定它们,而不是在数据坐标中指定y坐标(对于它来说,先验性尚不清楚,它们需要多大)。这可以通过使用变换来实现,其中x部分位于数据坐标中,而y部分位于轴坐标中。xaxis变换就是这样的变换。(这并不奇怪,因为x轴始终独立于ycoorinates。)

ax.fill_between(data.index, 0,1, where=data['USREC'], transform=ax.get_xaxis_transform())

会做的工作。

这是一个完整的示例:

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(0)

x = np.linspace(0,100,350)
y = np.cumsum(np.random.normal(size=len(x))) 
bo = np.zeros(len(y))
bo[y>5] = 1

fig, ax = plt.subplots()
ax.fill_between(x, 0, 1, where=bo, alpha=0.4, transform=ax.get_xaxis_transform())

plt.plot(x,y)
plt.show()

在此处输入图片说明

2021-01-20