Matplotlib:填充图形的子区域

Matplotlib : fill subarea of a Graph

我正在使用 series 和 matplotlib 绘制这样的图表:

基本上,我使用

构建它们
ax.plot(df)

其中 df 是一个序列,其索引为:'Sep'、'Oct'、'Nov'、.... 并评估一些数字。

我想要的是填充背景,但仅在 'Mar' 索引之后(例如) 目前我唯一能做的就是创建一个只有 'Mar' 到 'Jul' 的系列作为具有常量值的索引来标识“区域”,但理想情况下我会用一些颜色填充背景清楚地识别图表的两个部分(火星之前是数据实现,之后是我算法的一些预测)

例如,如果我使用:

ax.set_facecolor('silver')

我得到了这个结果:

但这应该只出现在 'Mars' 之后,但我没有找到任何方法来过滤背景以应用这种功能

如上所述,您可以使用 axvspan() 添加合适的背景颜色。

例如:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import date2num
import random
from datetime import datetime, timedelta

# Create some random data
data = []
x = datetime(2021, 1, 1)
y = 0
day = timedelta(days=1)

for _ in range(100):
    x += day
    y += random.random()
    data.append([x, y])

df = pd.DataFrame(data, columns=['Date', 'Value'])
df.plot('Date', 'Value')
ax = plt.gca()
march = date2num(datetime(2021, 3, 1))
latest = date2num(data[-1][0])
ax.axvspan(xmin=march, xmax=latest, facecolor='silver')
plt.show()

给你: