Isi di antara dua garis vertikal di matplotlib

101

Saya melihat contoh dalam matplotlibdokumentasi, tetapi tidak jelas bagi saya bagaimana saya bisa membuat plot yang mengisi area di antara dua garis vertikal tertentu.

Misalnya, saya ingin membuat plot antara x=0.2dan x=4(untuk seluruh yplot). Haruskah saya gunakan fill_between, fillatau fill_betweenx?

Bisakah saya menggunakan wherekondisi ini?

Amelio Vazquez-Reina
sumber

Jawaban:

205

Kedengarannya seperti yang Anda inginkan axvspan, bukan salah satu isian antar fungsi. Perbedaannya adalah bahwa axvspan(dan axhspan) akan memenuhi seluruh luas y (atau x) plot terlepas dari cara Anda memperbesar / memperkecil.

Misalnya, mari kita gunakan axvspanuntuk menyorot daerah x antara 8 dan 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()

masukkan deskripsi gambar di sini

Anda bisa menggunakan fill_betweenxuntuk melakukan ini, tetapi luasan (x dan y) persegi panjang akan berada dalam koordinat data . Dengan axvspan, luas y persegi panjang default ke 0 dan 1 dan berada dalam koordinat sumbu (dengan kata lain, persentase tinggi plot).

Untuk mengilustrasikan ini, mari buat persegi panjang memanjang dari 10% menjadi 90% dari tinggi (alih-alih memenuhi keseluruhan). Coba perbesar atau geser, dan perhatikan bahwa luasan y menunjukkan tetap di ruang tampilan, sedangkan luasan x bergerak dengan zoom / pan:

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()

masukkan deskripsi gambar di sini

Joe Kington
sumber
4
orang yang tertarik dengan solusi untuk menggunakan fill_betweengaris vertikal yang lebih " transform
berkelok-kelok