Làm cách nào để thêm tiêu đề vào các ô con trong Matplotlib?


225

Tôi có một hình chứa nhiều ô phụ.

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) 

Làm cách nào để thêm tiêu đề vào các ô con?

fig.suptitlethêm một tiêu đề cho tất cả các biểu đồ và mặc dù ax.set_title()tồn tại, cái sau không thêm bất kỳ tiêu đề nào vào các ô con của tôi.

Cảm ơn sự giúp đỡ của bạn.

Chỉnh sửa: Sửa lỗi chính tả về set_title(). Cảm ơn Kassies

Câu trả lời:


201

ax.title.set_text('My Plot Title') dường như cũng làm việc

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 thêm tiêu đề trên subplots


Đối với bất kỳ ai có vấn đề với kích thước phông chữ cho biểu đồ, việc giảm số lượng thùng cho phép tôi tăng một cách kỳ lạ. Đã đi từ 500 đến 100.
mLstudent33

Nếu bạn cần có thể chỉ định phông chữ, ax.set_title('title', fontsize=16)thay vào đó hãy sử dụng .
Tobias PG

234

ax.set_title() nên đặt tiêu đề cho các ô con riêng biệt:

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()

Bạn có thể kiểm tra nếu mã này làm việc cho bạn? Có lẽ một cái gì đó ghi đè lên chúng sau này?


1
Điều này hoạt động với tôi, matplotlib phiên bản 1.2.2 python 2.7.5
NameOfTheRose

41

Một câu trả lời ngắn gọn giả sử import matplotlib.pyplot as plt:

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

như trong:

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

Sau đó, không cần các biến thừa.


8

Nếu bạn muốn làm cho nó ngắn hơn, bạn có thể viết:

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()

Nó làm cho nó có thể ít rõ ràng hơn nhưng bạn không cần nhiều dòng hoặc biến


1

Trong trường hợp bạn có nhiều hình ảnh và bạn muốn lặp qua chúng và hiển thị chúng từng cái một cùng với tiêu đề - đây là những gì bạn có thể làm. Không cần xác định rõ ràng ax1, ax2, v.v.

  1. Điều hấp dẫn là bạn có thể định nghĩa các trục động (ax) như trong Dòng 1 của mã và bạn có thể đặt tiêu đề của nó bên trong một vòng lặp.
  2. Các hàng của mảng 2D là chiều dài (len) của trục (ax)
  3. Mỗi hàng có 2 mục tức là Danh sách trong danh sách (Điểm số 2)
  4. set_title có thể được sử dụng để đặt tiêu đề, sau khi các trục (ax) hoặc subplot thích hợp được chọn.
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()

nhập mô tả hình ảnh ở đây


0

Một giải pháp tôi có xu hướng sử dụng ngày càng nhiều là giải pháp này:

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. Tạo số trục tùy ý của bạn
  2. axs.ravel () chuyển đổi đối tượng 2 mờ của bạn thành một vectơ 1 mờ theo kiểu hàng chính
  3. gán tiêu đề cho đối tượng trục hiện tại
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.