เติมระหว่างเส้นแนวตั้งสองเส้นใน matplotlib


101

ฉันดูตัวอย่างในmatplotlibเอกสาร แต่ไม่ชัดเจนสำหรับฉันว่าฉันจะสร้างพล็อตที่เติมพื้นที่ระหว่างเส้นแนวตั้งสองเส้นได้อย่างไร

ตัวอย่างเช่นสมมติว่าฉันต้องการสร้างพล็อตระหว่างx=0.2และx=4(สำหรับyช่วงเต็มของพล็อต) ฉันควรใช้fill_between, fillหรือfill_betweenx?

ฉันสามารถใช้whereเงื่อนไขนี้ได้หรือไม่?

คำตอบ:


205

ดูเหมือนว่าคุณต้องการaxvspanมากกว่าหนึ่งในการเติมระหว่างฟังก์ชัน ความแตกต่างคือaxvspan(และaxhspan) จะเติมเต็มขอบเขต y (หรือ x) ทั้งหมดของพล็อตไม่ว่าคุณจะซูมอย่างไร

ตัวอย่างเช่นใช้axvspanเพื่อเน้น x-region ระหว่าง 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การทำเช่นนี้ แต่ extents (ทั้ง x และ y) ของสี่เหลี่ยมจะอยู่ในพิกัดข้อมูล ด้วยaxvspanค่าขยาย y ของสี่เหลี่ยมผืนผ้าเริ่มต้นเป็น 0 และ 1 และอยู่ในพิกัดแกน (กล่าวคือเปอร์เซ็นต์ของความสูงของพล็อต)

เพื่อแสดงให้เห็นถึงสิ่งนี้เรามาทำให้รูปสี่เหลี่ยมผืนผ้าขยายจาก 10% เป็น 90% ของความสูง (แทนที่จะใช้เต็มขอบเขต) ลองซูมหรือแพนและสังเกตว่าส่วนขยาย y บอกว่าคงที่ในพื้นที่แสดงผลในขณะที่ x-extents เคลื่อนที่ไปพร้อมกับการซูม / แพน:

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พารามิเตอร์ (และคำตอบนี้ )
Mr Tsjolder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.