วิธีเพิ่มชื่อเรื่องลงในแผนการย่อยใน Matplotlib?


225

ฉันมีหนึ่งรูปที่มีหลายย่อย

fig = plt.figure(num=None, figsize=(26, 12), dpi=80, facecolor='w', edgecolor='k')
fig.canvas.set_window_title('Window Title')

# Returns the Axes instance
ax = fig.add_subplot(311) 
ax2 = fig.add_subplot(312) 
ax3 = fig.add_subplot(313) 

ฉันจะเพิ่มชื่อให้กับแผนการย่อยได้อย่างไร

fig.suptitleเพิ่มชื่อเรื่องให้กับกราฟทั้งหมดและแม้ว่าจะax.set_title()มีอยู่ แต่สิ่งหลังไม่ได้เพิ่มชื่อเรื่องใด ๆ ลงในแผนย่อยของฉัน

ขอขอบคุณสำหรับความช่วยเหลือของคุณ.

แก้ไข: set_title()แก้ไขพิมพ์ผิดเกี่ยวกับ ขอบคุณ Rutger Kassies

คำตอบ:


201

ax.title.set_text('My Plot Title') ดูเหมือนว่าจะทำงานด้วย

fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)
ax1.title.set_text('First Plot')
ax2.title.set_text('Second Plot')
ax3.title.set_text('Third Plot')
ax4.title.set_text('Fourth Plot')
plt.show()

matplotlib เพิ่มชื่อเรื่องบนแผนผังย่อย


สำหรับใครก็ตามที่มีปัญหากับขนาดตัวอักษรของฮิสโตแกรมการลดจำนวนของถังขยะให้ฉันเพิ่มมากขึ้น ไปจาก 500 ถึง 100
mLstudent33

หากคุณต้องการระบุแบบอักษรให้ใช้ax.set_title('title', fontsize=16)แทน
โทเบียส PG

234

ax.set_title() ควรตั้งชื่อสำหรับแผนการย่อยแยก:

import matplotlib.pyplot as plt

if __name__ == "__main__":
    data = [1, 2, 3, 4, 5]

    fig = plt.figure()
    fig.suptitle("Title for whole figure", fontsize=16)
    ax = plt.subplot("211")
    ax.set_title("Title for first plot")
    ax.plot(data)

    ax = plt.subplot("212")
    ax.set_title("Title for second plot")
    ax.plot(data)

    plt.show()

คุณช่วยตรวจสอบว่ารหัสนี้ใช้ได้กับคุณหรือไม่? อาจมีบางสิ่งเขียนทับพวกเขาในภายหลัง


1
สิ่งนี้ใช้ได้กับฉัน matplotlib เวอร์ชั่น 1.2.2 python 2.7.5
NameOfTheRose

41

คำตอบชวเลขสมมติว่า import matplotlib.pyplot as plt:

plt.gca().set_title('title')

ในขณะที่:

plt.subplot(221)
plt.gca().set_title('title')
plt.subplot(222)
etc...

จากนั้นไม่จำเป็นต้องมีตัวแปรที่ไม่จำเป็น


8

หากคุณต้องการทำให้สั้นลงคุณสามารถเขียน:

import matplolib.pyplot as plt
for i in range(4):
    plt.subplot(2,2,i+1).set_title('Subplot n°{}' .format(i+1))
plt.show()

มันทำให้ชัดเจนน้อยลง แต่คุณไม่ต้องการบรรทัดหรือตัวแปรเพิ่มเติม


1

ในกรณีที่คุณมีภาพหลายภาพและคุณต้องการวนซ้ำและแสดง 1 ต่อ 1 พร้อมกับชื่อ - นี่คือสิ่งที่คุณสามารถทำได้ ไม่จำเป็นต้องกำหนด ax1, ax2 อย่างชัดเจน

  1. ที่จับคือคุณสามารถกำหนดแกนแบบไดนามิก (ขวาน) เช่นเดียวกับในบรรทัดที่ 1 ของรหัสและคุณสามารถตั้งชื่อของมันภายในวง
  2. แถวของอาร์เรย์ 2 มิติคือความยาว (len) ของแกน (ขวาน)
  3. แต่ละแถวมี 2 รายการคือรายการภายในรายการ (จุดที่ 2)
  4. set_title สามารถใช้ในการตั้งชื่อเมื่อมีการเลือกแกน (ขวาน) หรือแผนย่อยที่เหมาะสม
import matplotlib.pyplot as plt    
fig, ax = plt.subplots(2, 2, figsize=(6, 8))  
for i in range(len(ax)): 
    for j in range(len(ax[i])):
        ## ax[i,j].imshow(test_images_gr[0].reshape(28,28))
        ax[i,j].set_title('Title-' + str(i) + str(j))

1
fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=1, ncols=4,figsize=(11, 7))

grid = plt.GridSpec(2, 2, wspace=0.2, hspace=0.5)

ax1 = plt.subplot(grid[0, 0])
ax2 = plt.subplot(grid[0, 1:])
ax3 = plt.subplot(grid[1, :1])
ax4 = plt.subplot(grid[1, 1:])

ax1.title.set_text('First Plot')
ax2.title.set_text('Second Plot')
ax3.title.set_text('Third Plot')
ax4.title.set_text('Fourth Plot')

plt.show()

ป้อนคำอธิบายรูปภาพที่นี่


0

วิธีแก้ปัญหาที่ฉันมักจะใช้บ่อยๆคือ:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)  # 1
for i, ax in enumerate(axs.ravel()): # 2
    ax.set_title("Plot #{}".format(i)) # 3
  1. สร้างจำนวนแกนตามอำเภอใจของคุณ
  2. axs.ravel () แปลงวัตถุ 2-dim ของคุณเป็นเวกเตอร์ 1-dim ในสไตล์แถวหลัก
  3. กำหนดชื่อให้กับวัตถุแกนปัจจุบัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.