Estou criando uma figura no Matplotlib assim:
from matplotlib import pyplot as plt
fig = plt.figure()
plt.plot(data)
fig.suptitle('test title')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
fig.savefig('test.jpg')
Quero especificar tamanhos de fonte para o título da figura e os rótulos dos eixos. Eu preciso que todos os três tenham tamanhos de fonte diferentes, portanto, mpl.rcParams['font.size']=x
não é o que desejo definir um tamanho de fonte global ( ). Como definir tamanhos de fonte para o título da figura e os rótulos dos eixos individualmente?
python
matplotlib
vasek1
fonte
fonte
mpl.rcParams['font.size'] = 20
e alterei os valores para 10 e 14. Primeiro, descobri que havia erros, a menos que mudassempl
paraplt
. Essa alteração resolveu o erro, mas a linha de código não teve efeito nos meus títulos ou etiquetas. Claro que esta sintaxe está certa?mpl
comando?Respostas:
Funções que lidam com texto como
label
,title
, etc. aceitar parâmetros mesmos comomatplotlib.text.Text
. Para o tamanho da fonte, você pode usarsize/fontsize
:Para configurações
title
elabel
tamanhos globalmente ,mpl.rcParams
contémaxes.titlesize
eaxes.labelsize
. (A partir da página):(Pelo que pude ver, não há como definir
x
ey
rotular tamanhos separadamente.)E eu vejo que
axes.titlesize
isso não afetasuptitle
. Eu acho que você precisa definir isso manualmente.fonte
mpl.rcParams
. Eu editei minha resposta.plt.rcParams.update({'axes.titlesize': 'small'})
rcParams
link, usefigure.titlesize
além deaxes.titlesize
.python -c 'import matplotlib as mpl; print(mpl.__version__); print("figure.titlesize" in mpl.rcParams.keys())'
. Resultado é1.5.1
,True
. 1) Qual versão do matplotlib você está usando? Qual versão do Python? 2) Poderia ser um bug onde, por algum motivo, ele aceita,str
mas nãounicode
no Py2?Você também pode fazer isso globalmente através de um dicionário rcParams:
fonte
'x-large'
?pylab.rcParams.keys()
para ver a lista completa de parâmetros.ax.set_title('some title', fontsize=15)
,ax.set_xlabel('some xlabel', fontsize=12)
? Parece quercParams
só aceita strings.'axes.labelsize': 32,
Se você está mais acostumado a usar
ax
objetos para fazer sua plotagem, pode achar oax.xaxis.label.set_size()
mais fácil de lembrar, ou pelo menos mais fácil de encontrar usando a guia em um terminal ipython. Parece precisar de uma operação de redesenho depois para ver o efeito. Por exemplo:Não conheço uma maneira semelhante de definir o tamanho da legenda depois de criada.
fonte
fig.suptitle('test title', fontsize = 20)
parece funcionar.ax.set_xlabel('xlabel', fontsize = 20)' also works, in which case we can do away with
ax.xaxis.label.set_size (20) `.ax.xaxis.label.set_size()
quando estou trabalhando interativamente com um gráfico ipython e quero fazer uma avaliação visual rápida de vários tamanhos de fonte.plt.xlabel()
vs.ax.set_xlabel()
como você diz), elas são equivalentes, com a ressalva de que asplt.*
funções funcionam no eixo / figura atual . Então, se você configurar uma figura com vários eixos, provavelmente desejará usar chamadas explícitas, comoax1.set_xlabel()
para evitar confusão.Para modificar apenas a fonte do título (e não a fonte do eixo), usei o seguinte:
O fontdict aceita todos os kwargs de matplotlib.text.Text .
fonte
A definição global dos tamanhos das fontes
rcParams
deve ser feita comOs padrões podem ser restaurados usando
Você também pode fazer isso criando uma folha de estilos no
stylelib
diretório sob o diretório de configuração matplotlib (você pode obter seu diretório de configuraçãomatplotlib.get_configdir()
). O formato da folha de estilos éSe você possui uma folha de estilos
/path/to/mpl_configdir/stylelib/mystyle.mplstyle
, pode usá-la através deVocê também pode criar (ou modificar) um arquivo matplotlibrc que compartilhe o formato
Dependendo de qual arquivo matplotlibrc você modificar, essas alterações serão usadas apenas para o diretório de trabalho atual, para todos os diretórios de trabalho que não possuem um arquivo matplotlibrc ou para todos os diretórios de trabalho que não possuem um arquivo matplotlibrc e onde nenhum outro arquivo matplotlibrc possui foi especificado. Consulte esta seção da página de customização do matplotlib para obter mais detalhes.
Uma lista completa das
rcParams
chaves pode ser recuperada viaplt.rcParams.keys()
, mas para ajustar o tamanho da fonte que você possui (itálico aqui )axes.labelsize
- Tamanho das fontes dos rótulos x e yaxes.titlesize
- Tamanho da fonte do título dos eixosfigure.titlesize
- Tamanho do título da figura (Figure.suptitle()
)xtick.labelsize
- Tamanho das fontes dos rótulos dos ticksytick.labelsize
- Tamanho das fontes dos rótulos dos tickslegend.fontsize
- Tamanho da fonte para legendas (plt.legend()
,fig.legend()
)legend.title_fontsize
- Tamanho da fonte para títulos de legenda,None
define o mesmo que os eixos padrão. Veja esta resposta para exemplo de uso.todos aceitam tamanhos de string
{'xx-small', 'x-small', 'smaller', 'small', 'medium', 'large', 'larger', 'x-large', 'xxlarge'}
ou umfloat
inpt
. Os tamanhos das cadeias são definidos em relação ao tamanho da fonte padrão especificado porfont.size
- o tamanho da fonte padrão para o texto, fornecido em pts. 10 pt é o valor padrãoAlém disso, o peso pode ser especificado (embora apenas para o padrão seja exibido)
font.weight
- O peso padrão da fonte usada portext.Text
. Aceita{100, 200, 300, 400, 500, 600, 700, 800, 900}
ou'normal'
(400),'bold'
(700)'lighter'
e'bolder'
( em relação ao peso atual ).fonte
Uma solução alternativa para alterar o tamanho da fonte é alterar o preenchimento. Quando o Python salva seu PNG, você pode alterar o layout usando a caixa de diálogo exibida. O espaçamento entre os eixos, preenchendo se você quiser, pode ser alterado nesta fase.
fonte
Coloque
right_ax
antesset_ylabel()
ax.right_ax.set_ylabel('AB scale')
fonte
7 (melhor solução)
6 (solução ligeiramente pior)
fonte