Заполните между двумя вертикальными линиями в matplotlib

101

Я просмотрел примеры в matplotlibдокументации, но мне было непонятно, как я могу создать график, который заполняет область между двумя конкретными вертикальными линиями.

Например, скажем, я хочу создать график между x=0.2и x=4(для всего yдиапазона графика). Я должен использовать fill_between, fillили fill_betweenx?

Могу ли я использовать whereдля этого условие?

Амелио Васкес-Рейна
источник

Ответы:

205

Похоже, вы хотите axvspan, а не одна из заливок между функциями. Различия в том, что axvspanaxhspan) заполнит весь экстент y (или x) графика независимо от того, как вы увеличиваете масштаб.

Например, давайте используем, axvspanчтобы выделить x-область между 8 и 14:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, alpha=0.5, color='red')

plt.show()

введите описание изображения здесь

Вы можете использовать fill_betweenxдля этого, но размеры (как x, так и y) прямоугольника будут в координатах данных . С axvspan, y-экстенты прямоугольника по умолчанию равны 0 и 1 и находятся в координатах осей (другими словами, в процентах от высоты графика).

Чтобы проиллюстрировать это, давайте сделаем прямоугольник простирающимся от 10% до 90% высоты (вместо того, чтобы занимать весь размер). Попробуйте масштабировать или панорамировать и обратите внимание на то, что y-экстенты фиксируются в пространстве отображения, а x-экстенты перемещаются вместе с масштабированием / панорамированием:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, ymin=0.1, ymax=0.9, alpha=0.5, color='red')

plt.show()

введите описание изображения здесь

Джо Кингтон
источник
4
люди, которые заинтересованы в решении, которое можно использовать fill_betweenдля более «волнистых» вертикальных линий, взгляните на transformпараметр (и этот ответ )
г-н Цйолдер