Curso matplotlib - Elementos de texto
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
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.
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.
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ódigo0
, e a legenda é posicionada na melhor posição definida por um algoritmo (valor padrão);'upper right'
, que corresponde ao código1
, e a legenda é posicionada no canto superior direito;'upper left'
, que corresponde ao código2
, e a legenda é posicionada no canto superior esquerdo;'lower left'
, que corresponde ao código3
, e a legenda é posicionada no canto inferior esquerdo;'lower right'
, que corresponde ao código4
, e a legenda é posicionada no canto inferior direito;'right'
, que corresponde ao código5
, e a legenda é posicionada no canto direito;'center left'
, que corresponde ao código6
, e a legenda é posicionada no centro a esquerda;'center right'
, que corresponde ao código7
, e a legenda é posicionada no centro a direita;'lower center'
, que corresponde ao código8
, e a legenda é posicionada no centro inferior;'upper center'
, que corresponde ao código9
, e a legenda é posicionada no centro superior;'center'
, que corresponde ao código10
, e a legenda é posicionada no centro do gráfico;
Visualmente:
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.
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
.
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
.
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
É 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.
Título do eixo x
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
.
É 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.
É 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 eixox
;'right'
: posiciona o título à direita do eixox
;'left'
: posiciona o título à esquerda do eixox
;
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 .
Você encontra mais informações sobre o plt.xlabel()
na documentação.
Título do eixo y
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
.
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.
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 eixoy
;'bottom'
: posiciona o título na base do eixoy
;'top'
: posiciona o título no topo do eixoy
;
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.
Mais informações sobre o plt.ylabel()
podem ser encontradas na documentação.
Título do gráfico
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.
É 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.
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.
Você encontra mais informações sobre o plt.title()
na documentação.