Eu tenho muitos ticks no meu gráfico e eles estão se encontrando.
Como posso reduzir o número de ticks?
Por exemplo, eu tenho carrapatos:
1E-6, 1E-5, 1E-4, ... 1E6, 1E7
E eu só quero:
1E-5, 1E-3, ... 1E5, 1E7
Eu tentei brincar com o LogLocator
, mas não consegui descobrir isso.
python
matplotlib
jlconlin
fonte
fonte
pyplot.locator_params(axis = 'x', nbins = 4)
(ouaxis = 'y'
) tornar o processo realmente simples. Obrigado @bgamari!numticks
vez denbins
numticks
solução para gráficos logarítmicos, como apontado por @meduz?[0, 1, ..., 99]
e agora se definemnticks=10
, os novos rótulos esparsos serão colocados dez vezes mais afastados ao longo do eixo, ou seja, agora1
ficarão onde9
estava,2
onde19
estava ... e9
onde99
estava.Se alguém ainda receber essa página nos resultados da pesquisa:
fonte
Para resolver o problema de personalização e aparência dos ticks, consulte o guia Localizadores de ticks no site matplotlib
ax.xaxis.set_major_locator(plt.MaxNLocator(3))
Definiria o número total de ticks no eixo x como 3 e o distribuiria uniformemente pelo eixo.
Há também um bom tutorial sobre isso
fonte
ax = df.plot()
pandas.DataFrame
) com índice datetime [2019-01-01, ... 2019-11-01], callax = df.plot()
, retorne um objeto de figura. a chamadaax.xaxis.set_major_locator(plt.MaxNLocator(3))
mostra apenas o primeiro índice 3 [2019-01-01, 2019-01-02, 2019-01-03].df.plot()
muitas vezes exibe ominor_locator
, então você pode querer tentarax1.xaxis.set_minor_locator(plt.MaxNLocator(3))
. Lembre-se também de substituir o3
número de ticks que deseja exibir. Para pandas timeseries Eu recomendoimport matplotlib.dates as mdates
e executarax.xaxis.set_minor_locator(mdates.MonthLocator(interval = 1))
comax.xaxis.set_minor_formatter(mdates.DateFormatter('%m-%Y'))
Há uma
set_ticks()
função para objetos de eixo.fonte
get_xticks()
ouget_yticks()
primeiro o objeto de eixos, editar conforme necessário e depois passar a lista de volta paraset_ticks()
.set_ticks()
, mas eu tenhoset_xticks()
eset_yticks()
. Esses são atributos dos objetos dos eixos, não do eixo. Talvez isso tenha mudado nos últimos dois anos.caso alguém ainda precise, e como nada aqui realmente funcionou para mim, criei uma maneira muito simples que mantém a aparência do gráfico gerado "como está", enquanto fixa o número de ticks exatamente N:
fonte
ax.set_yticks(np.linspace(int(ymin), int(ymax), N), 2)
A solução que a @raphael deu é direta e bastante útil.
Ainda assim, os rótulos de marca de seleção exibidos não serão valores amostrados da distribuição original, mas dos índices da matriz retornados por
np.linspace(ymin, ymax, N)
.Para exibir N valores espaçados igualmente de seus rótulos de marca originais, use o
set_yticklabels()
método Aqui está um trecho para o eixo y, com rótulos inteiros:fonte
Quando uma escala de log é usada, o número de ticks principais pode ser corrigido com o seguinte comando
O valor definido como
numticks
determina o número de marcações do eixo a serem exibidas.Créditos à postagem de @ bgamari pela introdução da
locator_params()
função, mas onticks
parâmetro gera um erro quando uma escala de log é usada.fonte