การพล็อตด้วยทะเลโดยใช้อินเตอร์เฟสเชิงวัตถุ matplotlib


103

ฉันชอบใช้matplotlibในรูปแบบ OOP เป็นอย่างยิ่ง:

f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)

ทำให้ง่ายต่อการติดตามตัวเลขและพล็อตย่อยหลายรายการ

คำถาม: วิธีการใช้ทะเลบอร์นด้วยวิธีนี้? หรือจะเปลี่ยนตัวอย่างนี้เป็นสไตล์ OOP ได้อย่างไร? วิธีการบอกseabornฟังก์ชั่นการวางแผนเช่นlmplotที่FigureหรือAxesแปลงมันไป?


1
ที่เกี่ยวข้อง: ปัญหานี้และ คำตอบนี้สำหรับวิธีแก้ปัญหาที่เป็นไปได้ซึ่งจะช่วยให้สามารถสร้างรูปทะเลและย้ายแกนทั้งหมดไปยังตารางย่อยในภายหลัง
ImportanceOfBeingErnest

คำตอบ:


229

ขึ้นอยู่กับว่าคุณใช้ฟังก์ชั่นทะเลบอร์นใด

ฟังก์ชันการวางผังในทะเลแบ่งออกเป็นสองประเภทอย่างกว้าง ๆ

  • "แกนระดับ" ฟังก์ชั่นรวมทั้งregplot, boxplot, kdeplotและอื่น ๆ อีกมากมาย
  • "รูปที่ระดับ" ฟังก์ชั่นรวมทั้งlmplot, factorplot, jointplotและหนึ่งหรือสองคน

กลุ่มแรกถูกระบุโดยการaxโต้แย้งอย่างชัดเจนและส่งคืนAxesวัตถุ ตามคำแนะนำนี้คุณสามารถใช้ในรูปแบบ "เชิงวัตถุ" ได้โดยส่งAxesต่อไปยัง:

f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)

ฟังก์ชันระดับแกนจะดึงไปที่Axesและจะไม่ยุ่งกับร่างดังนั้นจึงสามารถอยู่ร่วมกันได้อย่างมีความสุขในสคริปต์ matplotlib เชิงวัตถุ

ฟังก์ชันกลุ่มที่สอง (Figure-level) มีความแตกต่างจากข้อเท็จจริงที่ว่าพล็อตผลลัพธ์อาจรวมถึงแกนหลาย ๆ แกนซึ่งถูกจัดระเบียบในลักษณะที่ "มีความหมาย" เสมอ นั่นหมายความว่าฟังก์ชั่นต่างๆจำเป็นต้องมีการควบคุมตัวเลขทั้งหมดดังนั้นจึงเป็นไปไม่ได้ที่จะพล็อตพูดว่าเป็นlmplotสิ่งที่มีอยู่แล้ว การเรียกใช้ฟังก์ชันจะกำหนดค่าเริ่มต้นของรูปและตั้งค่าสำหรับพล็อตเฉพาะที่กำลังวาดอยู่

แต่เมื่อคุณได้เรียกว่าก็จะกลับวัตถุชนิดหนึ่งlmplot FacetGridวัตถุนี้มีวิธีการบางอย่างสำหรับการดำเนินการกับพล็อตผลลัพธ์ที่รู้เกี่ยวกับโครงสร้างของพล็อตเล็กน้อย นอกจากนี้ยังแสดงรูปต้นแบบและอาร์เรย์ของแกนที่อาร์กิวเมนต์FacetGrid.figและ ฟังก์ชั่นที่คล้ายกันมาก แต่ก็ใช้วัตถุ ดังนั้นคุณยังสามารถใช้ฟังก์ชันเหล่านี้ในบริบทเชิงวัตถุได้ แต่การปรับแต่งทั้งหมดของคุณจะต้องเกิดขึ้นหลังจากที่คุณเรียกใช้ฟังก์ชันแล้วFacetGrid.axesjointplotJointGrid


นี่เป็นประโยชน์จริงๆ ดูคำตอบของฉันที่นี่: stackoverflow.com/questions/27019079/…
denson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.