Заполнение указанных областей в сюжете matplotlib - PullRequest
0 голосов
/ 27 февраля 2019

Я создаю базовый линейный сюжет с помощью matplotlib.Ось X представляет процентили.Ось Y представляет время в секундах.Я хочу заштриховать области диаграммы, которые представляют каждый процентиль (например, 0,25 и ниже,> 0,25 и <= 0,5 и т. Д.). </p>

Вот мой текущий код:

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

Как можно видеть, он правильно затеняет первый fill_between, где testx меньше или равен 0,25.Но потом ничего не затеняет.

Ожидаемый результат - многократное воспроизведение затенения для нескольких диапазонов.

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 27 февраля 2019

Это потому, что у вас недостаточно точек данных.

Т.е.

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) Изменениеваше условие, чтобы включить значения, где х равен 0,25:

where = ((testx >= 0.25) & (testx <= 0.5))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...