Curso matplotlib - Tipos de fontes

6 minute read

banner provisório


Um ponto muito importante em um gráfico é o tipo (ou família) de fonte utilizada. Algumas revistas científicas limitam as figuras em alguns tipos de fontes para garantir uma boa leitura do gráfico. Alterar a fonte utilizada nos elementos de texto e numéricos do gráfico do matplotlib é bem simples.

É possível alterar as fontes de duas formas:

  • alterar a fonte padrão de todos os elementos (recomendado);

  • alterar a fonte de cada elemento individualmente;

A primeira forma é a recomendada para evitar discrepâncias no gráfico. O gráfico é um elemento único, que tem uma mensagem a ser passada, e esta mensagem deve estar padronizada para não confundir o leitor. Em poucos casos será necessário alterar a fonte apenas de um ou outro elemento, e por isto esta opção não será abordada.

Para alterar a fonte padrão no matplotlib, podemos utilizar a classe rc do matplotlib. Através desta classe, podemos alterar qualquer configuração padrão do matplotlib (gerenciamento de backend). Uma lista com todas as opções pode ser acessada neste link

Para alterar a fonte padrão, precisamos alterar o valor do tipo da família da fonte. Para alterar a fonte padrão (que é a DejaVu Sans) para a fonte Arial por exemplo, podemos fazer da seguinte forma:

matplotlib.rc('font', family = 'Arial')

O primeiro argumento font se refere a qual característica será alterada. Já o argumento family se refere ao tipo de fonte que será utilizado. Para utilizar esta ferramenta, precisamos importar a root do matplotlib:

import matplotlib as mpl

E então aplicar o método da seguinte forma:

mpl.rc('font', family = 'Arial')

Em todos os gráficos que forem criados a partir de agora será utilizada a fonte Arial ao invés da fonte DejaVu Sans. Por exemplo:

Figura 1 - Gráfico de dispersão desenhado com a fonte Arial.

gráfico de dispersão desenhado utilizando o **matplotlib** com a fonte alterada para Arial


Observe que todos os elementos de texto/numéricos agora estão na fonte Arial. Um inconveniente desta forma de alterar o fonte, é que para retornar ao padrão temos de aplicar o método novamente, mas com a fonte padrão (DejaVu Sans) ou reiniciar todo o notebook.

Para saber quais fontes temos disponíveis para utilizar, utilizamos o mpl.font_manager.get_fontconfig_fonts(), que retorna uma list com o caminho de todos os arquivos de fontes disponíveis.

Para obter os nomes que são utilizados para alterar o tipo da fonte, podemos fazer desta forma:

flist = mpl.font_manager.get_fontconfig_fonts()
names = [mpl.font_manager.FontProperties(fname=fname).get_name() for fname in flist]
names = sorted(names)
nomes_fontes = set(names)

Aviso: o passo a passo de como foi escrito o código acima não foi detalhado pois ele foge, e muito, dos objetivos desse curso.

Agora, a variável nomes_fontes contém todos os nomes únicos disponíveis armazenados em ordem alfabética. Para saber a quantidade de nomes disponíveis, basta utilizar a função len():

len(nomes_fontes)

254

Quais fontes estarão disponíveis irá depender de uma série de fatores, como a versão do Python, a versão do matplotlib e sistema operacional utilizado.

Para alterar a fonte de Arial para Times New Roman, basta aplicar o método mpl.rc() novamente, mas passando o nome da nova fonte para o parâmetro font:

mpl.rc('font', family = 'Times New Roman')

Agora, todos os gráficos desenhados terão a fonte Times New Roman como fonte para as letras e números. 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, loc='right')
plt.show()

Figura 2 - Gráfico de dispersão desenhado com a fonte Times New Roman.

gráfico de dispersão desenhado utilizando o **matplotlib** com a fonte alterada para Times New Roman


Tamanho da fonte

banner provisório

Outro ponto muito importante para obter um gráfico adequado é o tamanho da fonte. As informações do gráfico devem estar claras, e ter um tamanho de fonte adequado é essencial para isto.

Podemos alterar o tamanho da fonte diretamente em cada elemento (como fizemos para a legenda), mas é mais comum manter um tamanho padrão no gráfico todo. Então, para alterar o tamanho da fonte de todos os elementos gráficos, podemos aplicar o método mpl.rc()novamente, mas agora passando o parâmetro size com um número correspondente ao tamanho de fonte desejada.

Por exemplo, passando size = 30:

mpl.rc('font', size = 30)

A partir de agora, todos os elementos de texto/números terão o tamanho 30. 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, loc='right')
plt.show()

Figura 3 - Gráfico de dispersão desenhado com o tamanho da fonte igual a 30.

gráfico de dispersão desenhado utilizando o **matplotlib** com o tamanho de fonte alterado para 30


Mas o gráfico acabou ficando com o tamanho do texto muito grande. Um valor adequado geralmente gira em torno de 12, mas isto depende da fonte utilizada e do tamanho da figura.

mpl.rc('font', size = 12)

Uma boa prática é aplicar o método mpl.rc('font', family = 'string', size = number) logo no início do notebook ou na mesma célula do gráfico, de forma que ao rodar o script, a atualização dos valores padrão é feita automaticamente.

Contudo, em alguns casos é interessante alterar o tamanho do texto de algum elemento específico do gráfico, e não todos os elementos. Para fazer isto, podemos passar o parâmetro prop, que recebe um dict com a chave size e como value o novo tamanho do texto do elemento.

prop={"size": tamanho_desejado}

Por exemplo, para alterar apenas o tamanho do texto da legenda para 20, basta passar prop={"size": 20} em plt.legend():

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(prop={"size":20})
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 4 - Gráfico de dispersão desenhado com o tamanho da fonte da legenda alterado utilizando o parâmetro prop.

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


Também existe a possibilidade de, ao invés de passar o parâmetro prop = {"size": 20}, passar diretamente o parâmetro fontsize = 20 para o elemento de gráfico que terá o tamanho de fonte alterado.

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(fontsize=20)
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 5 - Gráfico de dispersão desenhado com o tamanho da fonte da legenda alterado utilizando o parâmetro fontsize.

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


Observe que as Figuras 4 e 5 são idênticas, mas foram desenhadas de formas diferentes. A diferença entre estas duas formas é que o parâmetro prop permite a alteração de diversas outras propriedades, enquanto que o parâmetro fontsize permite a mudança apenas o tamanho da fonte. Por exemplo, caso queira alterar tanto a fonte como o tamanho da fonte apenas da legenda, seria necessário utilizar o parâmetro prop com a key size para alterar o tamanho da fonte, e a key family para alterar a fonte.

Por exemplo, para alterar o tamanho da fonte e o tipo de fonte (para Comic Sans MS) apenas na legenda, seria necessário utilizar o parâmetro prop da seguinte maneira:

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(prop={"size":20, 'family': 'Comic Sans MS'})
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 6 - Gráfico de dispersão desenhado com o tamanho da fonte e o tipo de fonte da legenda alterado utilizando o parâmetro prop.

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


Como alterar o tipo de fonte geral para Arial no matplotlib

Passando o parâmetro matplotlib.Arial() após criar o canvas da figura (plt.figure())

Passando o parâmetro matplotlib.Arial() após criar os elementos do gráfico (plt.scatter())

Setando a familia da fonte da seguinte forma: mpl.rc('font', family='Arial') antes de gera o gráfico

Setando a familia da fonte da seguinte forma: mpl.rc('font', family='Arial) antes de gera o gráfico

Anterior Próximo

Updated: