填充matplotlib图中的指定区域

时间:2019-02-27 15:35:22

标签: python matplotlib plot

我正在使用matplotlib创建基本的线条图。 x轴表示百分位数。 y轴以秒为单位表示时间。我想对表示每个百分位的图表区域进行阴影处理(例如0.25及以下,> 0.25和<= 0.5等)。

这是我当前的代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rc
from matplotlib import mlab
import matplotlib.ticker as mtick
import seaborn as sns

testx = np.array([0.0, 0.05, 0.25, 0.5, 0.9])
testy = np.array([0,5,14.75,40,96.1,120])

plt.plot(testx, testy)
plt.fill_between(testx, testy, where=(testx <= 0.25))
plt.fill_between(testx, testy, where=(testx > 0.25) & (testx <= 0.5))

这将返回以下图:

enter image description here

可以看出,它适当地遮盖了testx小于或等于0.25的第一个fill_between。但是此后它不会遮挡任何东西。

预期的输出是在多个范围内多次重现阴影。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

这是因为您没有足够的数据点。

testx = np.array([0.0, 0.05, 0.25, 0.5, 0.9])

这意味着您的状况:

where = ((testx > 0.25) & (testx <= 0.5))

只有一个等于Truewhere = [False False False True False])的值,而fill_between之间没有位置可填充。

您可以通过以下方式解决此问题:

a)使用更密集的“ x”采样(即,test_x = np.linspace(0,1,100)

b)更改条件以包括x等于0.25的值:

where = ((testx >= 0.25) & (testx <= 0.5))