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


95

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

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

Чи можу я використовувати whereдля цього умову?

Відповіді:


191

Це схоже на ваше бажання axvspan, а не на заповнення між функціями. Відмінність полягає в тому, що axvspanaxhspan) заповнить весь розмір у (або х) ділянки незалежно від того, як ви збільшуєте масштаб.

Наприклад, давайте використаємо, 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, екстенси у прямокутника за замовчуванням дорівнюють 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()

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


3
люди, яких цікавить рішення, яке використовуватиметься fill_betweenдля більш «хитких» вертикальних ліній, подивіться на transformпараметр (і на цю відповідь )
пан Цьолдер,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.