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

发布于 2021-01-29 15:01:12

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

目前我有:

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。

谢谢

关注者
0
被浏览
73
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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()
    

    在此处输入图片说明



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看