ฉันสับสนเล็กน้อยเกี่ยวกับวิธีการทำงานของรหัสนี้:
fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()
มะเดื่อและแกนทำงานในกรณีนี้อย่างไร มันทำอะไร?
ทำไมงานนี้ถึงไม่ทำแบบเดียวกัน:
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
ฉันสับสนเล็กน้อยเกี่ยวกับวิธีการทำงานของรหัสนี้:
fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()
มะเดื่อและแกนทำงานในกรณีนี้อย่างไร มันทำอะไร?
ทำไมงานนี้ถึงไม่ทำแบบเดียวกัน:
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
คำตอบ:
มีหลายวิธีที่จะทำ subplots
วิธีการสร้างรูปพร้อมกับย่อย ๆ ที่เก็บไว้จากนั้นในax
อาร์เรย์ ตัวอย่างเช่น:
import matplotlib.pyplot as plt
x = range(10)
y = range(10)
fig, ax = plt.subplots(nrows=2, ncols=2)
for row in ax:
for col in row:
col.plot(x, y)
plt.show()
อย่างไรก็ตามบางอย่างเช่นนี้จะใช้งานได้ แต่ก็ไม่ "สะอาด" ถึงแม้ว่าคุณจะสร้างรูปที่มีรูปแบบย่อยแล้วเพิ่มที่ด้านบน:
fig = plt.figure()
plt.subplot(2, 2, 1)
plt.plot(x, y)
plt.subplot(2, 2, 2)
plt.plot(x, y)
plt.subplot(2, 2, 3)
plt.plot(x, y)
plt.subplot(2, 2, 4)
plt.plot(x, y)
plt.show()
plot(x, y)
พล็อตของฉันมาจากฟังก์ชันที่ผู้ใช้กำหนดเองซึ่งสร้างกราฟด้วย networkx วิธีใช้งาน
axn = ax.flatten()
for axes in axn: axes.plot(x,y)
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 2)
ax[0, 0].plot(range(10), 'r') #row=0, col=0
ax[1, 0].plot(range(10), 'b') #row=1, col=0
ax[0, 1].plot(range(10), 'g') #row=0, col=1
ax[1, 1].plot(range(10), 'k') #row=1, col=1
plt.show()
ax
เป็น fig
แต่ไม่ใช่สิ่งที่เป็น พวกเขาคืออะไร
matplotlib.figure.Figure
คลาสที่คุณสามารถทำการจัดการกับรูปที่พล็อตได้ ตัวอย่างเช่นคุณสามารถเพิ่ม colorbar ให้กับแผนย่อยเฉพาะคุณสามารถเปลี่ยนสีพื้นหลังที่อยู่เบื้องหลังแผนการย่อยทั้งหมด คุณสามารถแก้ไขโครงร่างของแผนย่อยเหล่านี้หรือเพิ่มขวานเล็ก ๆ ใหม่ให้พวกเขา โดยเฉพาะอย่างยิ่งคุณอาจต้องการชื่อหลักเดียวสำหรับแผนการย่อยทั้งหมดซึ่งสามารถรับได้ผ่านfig.suptitle(title)
วิธีการ ในที่สุดเมื่อคุณพอใจกับเนื้อเรื่องแล้วคุณสามารถบันทึกโดยใช้fig.savefig
วิธีการ @Leevo
คุณสามารถคลายแกนในการโทรย่อยได้
และตั้งค่าว่าคุณต้องการแบ่งปันแกน x และ y ระหว่างแผนการย่อยหรือไม่
แบบนี้:
import matplotlib.pyplot as plt
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
ax1.plot(range(10), 'r')
ax2.plot(range(10), 'b')
ax3.plot(range(10), 'g')
ax4.plot(range(10), 'k')
plt.show()
คุณอาจสนใจในความจริงที่ว่า matplotlib เวอร์ชั่น 2.1 โค้ดที่สองจากคำถามใช้งานได้ดีเช่นกัน
จากบันทึกการเปลี่ยนแปลง :
คลาสรูปตอนนี้มีเมธอด subplots คลาสรูปตอนนี้มีเมธอด subplots () ซึ่งทำงานเหมือนกับ pyplot.subplots () แต่อยู่ในรูปที่มีอยู่
ตัวอย่าง:
import matplotlib.pyplot as plt
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
plt.show()
อ่านเอกสารประกอบ: matplotlib.pyplot.subplots
pyplot.subplots()
ส่งคืน tuple fig, ax
ซึ่งไม่ได้คลายแพ็กในสองตัวแปรโดยใช้รูปแบบ
fig, axes = plt.subplots(nrows=2, ncols=2)
รหัส
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
ไม่ได้เพราะsubplots()
เป็นฟังก์ชั่นในไม่ได้เป็นสมาชิกของวัตถุpyplot
Figure