Curso matplotlib - Elementos de texto

8 minute read


Os elementos de texto (legendas e títulos) são muito importantes para um gráfico, pois é através deles que dizemos ao leitor o que cada elemento gráfico representa.

Legendas

banner provisório

As legendas são caixas de texto que explicam os elementos dos gráficos. Inserir uma legenda no gráfico criado com o matplotlib é muito simples, bastando passar o nome desejado para o parâmetro label em plt.scatter(). Também precisamos adicionar o plt.legend(), que irá efetivamente criar a legenda e adicionar ela a figura criada. Este último parâmetro deve estar posicionado após o plt.scatter() e antes de plt.show().

Então, precisamos da seguinte estrutura:

plt.figure()
plt.scatter(label="Nome da legenda")
plt.legend()
plt.show()

Por exemplo, caso for adicionado apenas o parâmetro label em plt.scatter():

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.show()

Figura 1 - Gráfico de dispersão com legenda não inserida.

gráfico de dispersão desenhado utilizando o **matplotlib** com a legenda não inserida


obtemos o gráfico sem as legendas. Mas ao adicionar o plt.legend() após o plt.scatter(), obtemos as legendas corretamente:

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend()
plt.show()

Figura 2 - Gráfico de dispersão com legenda.

gráfico de dispersão desenhado utilizando o **matplotlib** com legenda


Observe que, se o plt.legend() estiver antes de plt.scatter(), a legenda não será inserida e um aviso será apresentado:

No handles with labels found to put in legend.

Devemos inserir a legendas apenas após a criação dos elementos anteriores, como a figura (plt.figure()) e o elemento de dispersão (plt.scatter()). O plt.legend() deve ser adicionado antes do gráfico ser apresentado (plt.show()).

Posição das Legendas no gráfico

Podemos especificar o local em que a legenda será inserida no gráfico, o que é feito passando a posição desejada através do parâmetro loc em plt.legend(). Esta posição pode ser definida através de uma str ou através de um número int que se refere a posição desejada.

Temos 10 posições disponíveis, sendo que a loc='best' é a posição padrão:

  • 'best’, que corresponde ao código 0, e a legenda é posicionada na melhor posição definida por um algoritmo (valor padrão);
  • 'upper right', que corresponde ao código 1, e a legenda é posicionada no canto superior direito;
  • 'upper left', que corresponde ao código 2, e a legenda é posicionada no canto superior esquerdo;
  • 'lower left', que corresponde ao código 3, e a legenda é posicionada no canto inferior esquerdo;
  • 'lower right', que corresponde ao código 4, e a legenda é posicionada no canto inferior direito;
  • 'right', que corresponde ao código 5, e a legenda é posicionada no canto direito;
  • 'center left', que corresponde ao código 6, e a legenda é posicionada no centro a esquerda;
  • 'center right', que corresponde ao código 7, e a legenda é posicionada no centro a direita;
  • 'lower center', que corresponde ao código 8, e a legenda é posicionada no centro inferior;
  • 'upper center', que corresponde ao código 9, e a legenda é posicionada no centro superior;
  • 'center', que corresponde ao código 10, e a legenda é posicionada no centro do gráfico;


Visualmente:

Gráfico apresentando as posições padrão disponíveis para alocar a legenda

O notebook utilizado para desenhar a imagem acima pode ser acessado clicando aqui.

Por exemplo, para deixar a legenda no centro do gráfico, podemos utilizar loc='center':

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend(loc = 'center')
plt.show()

Figura 3 - Gráfico de dispersão com a legenda posicionada no centro do gráfico.

gráfico de dispersão desenhado utilizando o **matplotlib** com a legenda posicionada no centro da imagem


Também temos a possibilidade de especificar a posição da legenda de forma arbitrária, o que é feito passando uma tuple com a posição desejada para x e y para o parâmetro bbox_to_anchor em plt.legend().

plt.legend(bbox_to_anchor=(x,y))

Por exemplo, para adicionar a legenda em x = 0.1 e y = 0.1:

plt.figure(figsize=(8,6))
plt.scatter(x, y, s = 100.1, marker = "D", edgecolors = 'k', facecolors = 'none',
            label="Raças de cachorros")
plt.legend(bbox_to_anchor = (0.1,0.1))
plt.show()

Figura 4 - Gráfico de dispersão com a legenda posicionada em x = 0 e y = 0.

gráfico de dispersão desenhado utilizando o **matplotlib** com a legenda posicionada na origem do gráfico


Para alocar a legenda fora do gráfico, basta passar valores maiores de 1 para x e/ou y. Por exemplo, para deixar a legenda no canto superior direito, mas fora do gráfico, podemos deixar x = 1.02 e y = 1:

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend(bbox_to_anchor=(1.02,1))
plt.show()

Figura 5 - Gráfico de dispersão com a legenda posicionada em x = 1.02 e y = 1.

gráfico de dispersão desenhado utilizando o **matplotlib** com a legenda posicionada fora do gráfico


Você encontra mais detalhes sobre o posicionamento das legendas na documentação. Iremos voltar a abordar o caso do posicionamento das legendas fora do gráfico quando formos exportar o gráfico.

Tamanho da fonte da legenda no gráfico

banner provisório

É possível alterar o tamanho da fonte da legenda diretamente em plt.legend(). Basta passar um número (int ou float) para o plt.legend() através do parâmetro fontsize:

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend(bbox_to_anchor=(1.02,1), fontsize=20)
plt.show()

Figura 6 - Gráfico de dispersão com a legenda com tamanho de fonte aumentado.

gráfico de dispersão desenhado utilizando o **matplotlib** com o tamanho da fonte da legenda aumentada


Como adicionar legenda em um gráfico de dispersão no matplotlib?

Imprimindo o gráfico e escrevendo com uma caneta

Adicionando o plt.legend() após a adição do plt.scatter()

Passando o parâmetro label em plt.scatter() com o nome que será utilizado na legenda.

Combinando as respostas b e c

Título do eixo x

banner provisório

Para adicionar um título ao eixo x, utilizamos o plt.xlabel(), passando como uma str o texto que será adicionado ao título do eixo x. O plt.xlabel() precisa estar posicionado antes de plt.show():

plt.figure()

...

plt.xlabel()
plt.show()

Por exemplo:

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend()
plt.xlabel("Peso (kg)")
plt.show()

Figura 7 - Gráfico de dispersão título no eixo x.

gráfico de dispersão desenhado utilizando o **matplotlib** com título no eixo x


É possível alterar o espaçamento entre o eixo x e o nome do eixo x, passando um número (que pode ser um float ou int) através do parâmetro labelpad. O valor padrão é 4.0. Por exemplo:

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend()
plt.xlabel("Peso (kg)", labelpad=20.0)
plt.show()

Figura 8 - Gráfico de dispersão com título no eixo x com espaçamento.

gráfico de dispersão desenhado utilizando o **matplotlib** com título no eixo x com espaçamento


É possível alterar a posição do título do eixo x através do parâmetro loc. Temos três opções:

  • 'center' (padrão): posiciona o título no centro do eixo x;
  • 'right': posiciona o título à direita do eixo x;
  • 'left': posiciona o título à esquerda do eixo x;

Por exemplo, para deixar o título do eixo x no canto direito basta passar loc="right":

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend()
plt.xlabel("Peso (kg)", labelpad=20, loc="right")
plt.show()

Figura 9 - Gráfico de dispersão com título no eixo x no canto direito e com espaçamento .

gráfico de dispersão desenhado utilizando o **matplotlib** com título no eixo x no canto direito e com espaçamento


Você encontra mais informações sobre o plt.xlabel() na documentação.

Título do eixo y

banner provisório

Para adicionar um título ao eixo y, utilizamos o plt.ylabel(), passando como uma str o texto que será adicionado ao título do eixo y. Assim como o plt.xlabel(), o plt.ylabel() precisa esta posicionado antes de plt.show().

plt.figure()

...

plt.ylabel()
plt.show()

Por exemplo:

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend()
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.show()

Figura 10 - Gráfico de dispersão título no eixo y.

gráfico de dispersão desenhado utilizando o **matplotlib** com título no eixo y


Também é possível alterar o espaçamento entre o eixo y e o titulo do eixo y, passando um número (float ou int) através do parâmetro labelpad. O valor padrão é 4.0. Por exemplo:

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend()
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)", labelpad=25)
plt.show()

Figura 11 - Gráfico de dispersão título no eixo y com espaçamento.

gráfico de dispersão desenhado utilizando o **matplotlib** com título no eixo y com espaçamento


Também é possível alterar a posição do título do eixo y através do parâmetro loc. Temos três opções:

  • 'center' (padrão): posiciona o título no centro do eixo y;
  • 'bottom': posiciona o título na base do eixo y;
  • 'top': posiciona o título no topo do eixo y;

Por exemplo, para deixar o título do eixo y no topo, basta utilizar loc = "top":

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend()
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)", labelpad=25, loc='top')
plt.show()

Figura 12 - Gráfico de dispersão título no eixo y com espaçamento e no topo do gráfico.

gráfico de dispersão desenhado utilizando o **matplotlib** com título no eixo y com espaçamento e no topo do gráfico


Mais informações sobre o plt.ylabel() podem ser encontradas na documentação.

Título do gráfico

banner provisório

Para adicionar um título ao gráfico utilizamos o plt.title(), passando como uma str o nome para o título. O plt.title() precisa esta posicionado antes de plt.show().

plt.figure()

...

plt.title()
plt.show()

Por exemplo:

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend()
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diversas raças de cachorro")
plt.show()

Figura 13 - Gráfico de dispersão com título.

gráfico de dispersão desenhado utilizando o **matplotlib** com título


É possível alterar o espaçamento entre o título do gráfico e o topo do gráfico, passando um número (float ou int) através do parâmetro labelpad. O valor padrão é 6.0. Por exemplo:

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend()
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diversas raças de cachorro", pad=40)
plt.show()

Figura 14 - Gráfico de dispersão com título com espaçamento.

gráfico de dispersão desenhado utilizando o **matplotlib** com título com espaçamento


Também é possível alterar a posição do título do gráfico através do parâmetro loc. Temos três opções:

  • 'center' (padrão): posiciona o título no centro (em relação ao eixo x);
  • 'right': posiciona o título à direita (em relação ao eixo x);
  • 'left': posiciona o título à esquerda (em relação ao eixo x);

Por exemplo, para deixar o título do gráfico justificado à direita:

plt.figure(figsize=(8,6))
plt.scatter(x,y, s = 100.1, marker = "D", edgecolors = 'k', facecolors='none',
            label="Raças de cachorros")
plt.legend()
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diversas raças de cachorro", pad=40, loc='right')
plt.show()

Figura 15 - Gráfico de dispersão com título com espaçamento e justificado à direita.

gráfico de dispersão desenhado utilizando o **matplotlib** com título com espaçamento e justificado à direita


Você encontra mais informações sobre o plt.title() na documentação.

Como adicionar espaçamento entre o título do gráfico e o gráfico?

Passando o parâmetro pad em plt.xlabel()

Passando o parâmetro labelpad em plt.title()

Passando o parâmetro pad em plt.title()


Anterior Próximo

Updated: