Como adicionar título às subtramas no Matplotlib?

225

Eu tenho uma figura que contém muitas subparcelas.

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) 

Como adiciono títulos às subparcelas?

fig.suptitleadiciona um título a todos os gráficos e, embora ax.set_title()exista, o último não adiciona nenhum título às minhas subparcelas.

Obrigado pela ajuda.

Editar: erro de digitação corrigido sobre set_title(). Obrigado Rutger Kassies

Shailen
fonte

Respostas:

201

ax.title.set_text('My Plot Title') parece funcionar também.

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 adiciona títulos em subparcelas

Jarad
fonte
Para qualquer pessoa que tenha problemas com o tamanho da fonte de um histograma, por incrível que pareça, a redução do número de posições permite-me aumentá-la. Foi de 500 a 100.
mLstudent33 19/02
Se você precisar especificar o tamanho da fonte, use ax.set_title('title', fontsize=16).
Tobias PG
234

ax.set_title() deve definir os títulos para subparcelas separadas:

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

Você pode verificar se esse código funciona para você? Talvez algo os substitua mais tarde?

masteusz
fonte
1
Isso funciona para mim, matplotlib versão 1.2.2 python 2.7.5
NameOfTheRose
41

Uma resposta abreviada assumindo import matplotlib.pyplot as plt:

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

como em:

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

Então não há necessidade de variáveis ​​supérfluas.

JMDE
fonte
8

Se você quiser reduzi-lo, escreva:

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

Talvez fique menos claro, mas você não precisa de mais linhas ou variáveis

SAGET Shinji
fonte
1

Caso você tenha várias imagens e queira fazer um loop através delas e mostrá-las 1 a 1 junto com os títulos - é isso que você pode fazer. Não há necessidade de definir explicitamente ax1, ax2 etc.

  1. O problema é que você pode definir eixos dinâmicos (ax) como na Linha 1 do código e definir seu título dentro de um loop.
  2. As linhas da matriz 2D são o comprimento (len) do eixo (ax)
  3. Cada linha possui 2 itens, ou seja, é uma lista dentro de uma lista (ponto 2)
  4. set_title pode ser usado para definir o título, uma vez que os eixos (ax) ou subtrama adequados sejam selecionados.
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))
rishi jain
fonte
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()

insira a descrição da imagem aqui

Wojciech Moszczyński
fonte
0

Uma solução que costumo usar cada vez mais é esta:

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. Crie seu número arbitrário de eixos
  2. axs.ravel () converte seu objeto de 2 dim em um vetor de 1 dim no estilo de linha principal
  3. atribui o título ao atual eixo-objeto
JMDE
fonte