Em uma figura do matplotlib, como posso reduzir o tamanho da fonte dos rótulos dos marcadores ax1.set_xticklabels()
?
Além disso, como girá-lo da horizontal para a vertical?
Em uma figura do matplotlib, como posso reduzir o tamanho da fonte dos rótulos dos marcadores ax1.set_xticklabels()
?
Além disso, como girá-lo da horizontal para a vertical?
Respostas:
Observe que as versões mais recentes do MPL possuem um atalho para esta tarefa. Um exemplo é mostrado na outra resposta a esta pergunta: https://stackoverflow.com/a/11386056/42346
O código abaixo é para fins ilustrativos e pode não ser necessariamente otimizado.
import matplotlib.pyplot as plt
import numpy as np
def xticklabels_example():
fig = plt.figure()
x = np.arange(20)
y1 = np.cos(x)
y2 = (x**2)
y3 = (x**3)
yn = (y1,y2,y3)
COLORS = ('b','g','k')
for i,y in enumerate(yn):
ax = fig.add_subplot(len(yn),1,i+1)
ax.plot(x, y, ls='solid', color=COLORS[i])
if i != len(yn) - 1:
# all but last
ax.set_xticklabels( () )
else:
for tick in ax.xaxis.get_major_ticks():
tick.label.set_fontsize(14)
# specify integer or one of preset strings, e.g.
#tick.label.set_fontsize('x-small')
tick.label.set_rotation('vertical')
fig.suptitle('Matplotlib xticklabels Example')
plt.show()
if __name__ == '__main__':
xticklabels_example()
plt.setp
. (Além disso, dê uma olhada ax.tick_params
) Por exemplo, você pode fazer plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=14)
. Além disso, os objetos axes possuem um ax.is_last_row()
método que pode ser útil em casos como o seu exemplo. Em vez de if i != len...
, você pode fazer if not ax.is_last_row()
. (Porque é um método, eu não tenho idéia ... Matplotlib odeia propriedades, aparentemente!)
is_last_row()
, obrigado! Eu usei plt.setp
no passado e não tinha necessariamente certeza de que isso representava uma maneira mais canônica de personalizar rótulos de carrapatos. Você removeu essa dúvida, obrigado. De maneira mais ampla: suas respostas, especialmente na matplotlib
etiqueta, freqüentemente me deixam admirado. Continue com o ótimo trabalho.
plt.setp
é um "matlab-ism" e um loop explícito é provavelmente muito mais pitônico. Ser um convertido do matlab setp
parece natural, mas cada um é seu. Qualquer um dos dois é bastante legível, imo
ax.tick_params(axis='x', labelsize=8)
get_ticklabels
nãoget_major_ticks
Existe uma maneira mais simples, na verdade. Acabei de encontrar:
import matplotlib.pyplot as plt
# We prepare the plot
fig, ax = plt.subplots()
# We change the fontsize of minor ticks label
ax.tick_params(axis='both', which='major', labelsize=10)
ax.tick_params(axis='both', which='minor', labelsize=8)
Isso apenas responde ao tamanho de label
parte da sua pergunta.
axis = 'x'
ou axis = 'y'
para modificar apenas um dos eixos
Para especificar o tamanho da fonte e a rotação ao mesmo tempo, tente o seguinte:
plt.xticks(fontsize=14, rotation=90)
Como alternativa, você pode apenas fazer:
import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size
plt.tick_params(axis='both', which='minor', labelsize=12)
ax.xaxis.set_tick_params(labelsize=20)
Outra alternativa
Tenho duas parcelas lado a lado e gostaria de ajustar os rótulos das marcas separadamente.
As soluções acima estavam próximas, mas não estavam funcionando para mim. Encontrei minha solução nesta página do matplotlib .
ax.xaxis.set_tick_params(labelsize=20)
Isso fez o truque e foi direto ao ponto. Para o meu caso de uso, era o gráfico à direita que precisava ser ajustado. Para a plotagem à esquerda desde que eu estava criando novos rótulos de marca, pude ajustar a fonte no mesmo processo que defini -la.
ie
ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)
então eu usei para o enredo certo,
ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)
Uma pequena sutileza ... eu sei ... mas espero que isso ajude alguém :)
Pontos de bônus, se alguém souber como ajustar o tamanho da fonte na ordem da magnitude.
Você também pode alterar os parâmetros de exibição do rótulo, como tamanho da fonte, com uma linha como esta:
zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]
Para fonte menor, eu uso
ax1.set_xticklabels(xticklabels, fontsize=7)
e funciona!
O seguinte funcionou para mim:
ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)
A vantagem do exposto acima é que você não precisa fornecer os dados array
de labels
e trabalha com eles axes
.