我正在使用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))
这将返回以下图:
可以看出,它适当地遮盖了testx小于或等于0.25的第一个fill_between。但是此后它不会遮挡任何东西。
预期的输出是在多个范围内多次重现阴影。
任何帮助将不胜感激!
答案 0 :(得分:2)
这是因为您没有足够的数据点。
即
testx = np.array([0.0, 0.05, 0.25, 0.5, 0.9])
这意味着您的状况:
where = ((testx > 0.25) & (testx <= 0.5))
只有一个等于True
(where = [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))