Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Похоже, вы хотите 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()

enter image description here

Вы можете использовать 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()

enter image description here