สร้างแผนภูมิมากกว่าหนึ่งแผนภูมิในเซลล์ IPython Notebook เดียวกัน


88

ฉันได้เริ่มต้น IPython Notebook ของฉันด้วย

ipython notebook --pylab inline

นี่คือรหัสของฉันในเซลล์เดียว

df['korisnika'].plot()
df['osiguranika'].plot()

มันใช้งานได้ดีมันจะวาดสองเส้น แต่อยู่ในแผนภูมิเดียวกัน

ฉันต้องการวาดแต่ละเส้นในแผนภูมิแยกกัน และจะดีมากถ้าชาร์ตจะอยู่ติดกันไม่ใช่ติดกัน

ฉันรู้ว่าฉันสามารถใส่บรรทัดที่สองในเซลล์ถัดไปจากนั้นฉันจะได้สองแผนภูมิ แต่ฉันต้องการให้แผนภูมิอยู่ใกล้กันเพราะมันแสดงถึงหน่วยตรรกะเดียวกัน

คำตอบ:


89

สร้างแกนหลายแกนก่อนแล้วส่งต่อไปยังฟังก์ชันพล็อต Pandas เช่น:

fig, axs = plt.subplots(1,2)

df['korisnika'].plot(ax=axs[0])
df['osiguranika'].plot(ax=axs[1])

มันยังคงให้คุณได้ 1 รูป แต่มีสองพล็อตที่แตกต่างกัน


3
นี่คือการทำงาน ตอนนี้ฉันจะไม่เปลี่ยนขนาดของภาพ ฉันทำได้ด้วย fig, axs = plt.subplots (1,2, figsize = (15, 5)) มีวิธีกำหนดขนาดของภาพเป็นพิกเซลหรือไม่?
WebOrCode

1
การใช้มะเดื่อเป็นวิธีที่มีขนาดเป็นนิ้ว จำนวนพิกเซลที่จะขึ้นอยู่กับ dpi ซึ่งกำหนดไว้สำหรับการแสดงบนหน้าจอ แต่สำหรับการบันทึกนั้นสามารถตั้งค่าได้โดยเพิ่มคีย์เวิร์ด dpi
Rutger Kassies

3
มันไม่ถูกต้องนักที่ dpi ได้รับการแก้ไขสำหรับการแสดงผลบนหน้าจอ (ก็เป็นเช่นนั้นและไม่ใช่) IPython แสดงภาพตามขนาดพิกเซลเท่านั้นและขนาดพิกเซลนั้นจะถูกกำหนดใน matplotlib โดยการคูณขนาดรูปเป็นนิ้วด้วยการsavefig.dpiกำหนดค่า ตัวเลขอินไลน์ใช้เส้นทาง savefig เดียวกับการเขียนไฟล์
minrk

ขอบคุณที่ชี้ให้เห็นฉันไม่รู้ว่ามันทำงานแบบนั้น จะไม่สะดวกกว่านี้แม้ว่าจะคำนึงถึง dpi ของการแสดงผลด้วย (เช่นกัน) เนื่องจากง่ายต่อการตั้งค่าในการสร้างรูป สำหรับ savefig.dpi ฉันไม่รู้วิธีอื่นนอกจากmpl.rcParams['savefig.dpi'] = 120. สำหรับ dpi ที่แสดงมีคีย์เวิร์ดในหลาย ๆ ที่เช่นplt.figure(dpi=120)แต่ตอนนี้ถูกเพิกเฉยดังนั้นสมมติฐานที่ผิดของฉันเกี่ยวกับการแก้ไข
Rutger Kassies

102

คุณยังสามารถเรียกใช้ฟังก์ชัน show () หลังแต่ละพล็อต เช่น

   plt.plot(a)
   plt.show()
   plt.plot(b)
   plt.show()

1
เยี่ยมมาก แต่จะตั้งค่าตำแหน่งภาพพล็อตเช่น (2,2) หรือ (1,2) ได้อย่างไร?
Pythoner

3
ด้วยตัวเลือกนี้พล็อตจำเป็นต้องปรากฏทีละรายการ สำหรับการควบคุมเพิ่มเติมเกี่ยวกับเค้าโครงโดยรวมpyplot.subplots()เป็นวิธีที่จะไป
Eric O Lebigot

1
ฉันลบลิงค์ออก
Tooblippe

12

สิ่งนี้:

import matplotlib.pyplot as plt
... code for plot 1 ...
plt.show()
... code for plot 2...
plt.show()

โปรดทราบว่าสิ่งนี้จะใช้ได้เช่นกันหากคุณใช้seabornแพ็คเกจสำหรับการพล็อต:

import matplotlib.pyplot as plt
import seaborn as sns
sns.barplot(... code for plot 1 ...) # plot 1
plt.show()
sns.barplot(... code for plot 2 ...) # plot 2
plt.show()

11

อีกวิธีหนึ่งเพื่อความหลากหลาย แม้ว่าสิ่งนี้จะค่อนข้างยืดหยุ่นน้อยกว่าแบบอื่น น่าเสียดายที่กราฟจะปรากฏขึ้นด้านบนของอีกกราฟแทนที่จะแสดงแบบเคียงข้างกันซึ่งคุณได้ร้องขอในคำถามเดิมของคุณ แต่มีความกระชับมาก

df.plot(subplots=True)

หาก dataframe มีมากกว่าสองชุดและคุณเพียงต้องการที่จะพล็อตทั้งสองคุณจะต้องเปลี่ยนด้วยdfdf[['korisnika','osiguranika']]


2

ฉันไม่รู้ว่านี่เป็นฟังก์ชั่นใหม่หรือไม่ แต่จะพล็อตเป็นตัวเลขแยกกัน:

df.plot(y='korisnika')
df.plot(y='osiguranika')

ในขณะที่สิ่งนี้จะพล็อตในรูปเดียวกัน: (เช่นเดียวกับรหัสใน op)

df.plot(y=['korisnika','osiguranika'])

ฉันพบคำถามนี้เพราะฉันใช้วิธีการเดิมและต้องการให้พวกเขาพล็อตเรื่องเดียวกันดังนั้นคำถามของคุณจึงเป็นคำตอบของฉัน

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