Как добавить заголовок к сюжетам в 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(). Спасибо Рутгер Касси

Ответы:


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)вместо этого.
Тобиас П.Г.

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. Суть в том, что вы можете определить динамические оси (ax), как в строке 1 кода, и вы можете установить его заголовок внутри цикла.
  2. Строки 2D-массива - это длина (len) оси (ax)
  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-мерный объект в 1-мерный вектор в стиле мажорной строки
  3. назначает заголовок текущему объекту оси
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.