Risposte:
In alternativa, se si desidera semplicemente impostare il numero di tick, consentendo a matplotlib di posizionarli (attualmente solo con MaxNLocator), è possibile pyplot.locator_params,
pyplot.locator_params(nbins=4)
È possibile specificare un asse specifico in questo metodo come indicato di seguito, il valore predefinito è entrambi:
# To specify the number of ticks on both or any single axes
pyplot.locator_params(axis='y', nbins=6)
pyplot.locator_params(axis='x', nbins=10)
numticksinvece dinbins
numtickssoluzione per i grafici logaritmici, come sottolineato da @meduz?
[0, 1, ..., 99]e ora si imposta nticks=10, le nuove etichette sparse verranno posizionate dieci volte più a lungo lungo l'asse, cioè ora 1siederà dove 9era, 2dove 19era ... e 9dove 99era.
Se qualcuno ottiene ancora questa pagina nei risultati di ricerca:
fig, ax = plt.subplots()
plt.plot(...)
every_nth = 4
for n, label in enumerate(ax.xaxis.get_ticklabels()):
if n % every_nth != 0:
label.set_visible(False)
Per risolvere il problema della personalizzazione e l'aspetto delle zecche, vedere il Tick Locator guida sul sito matplotlib
ax.xaxis.set_major_locator(plt.MaxNLocator(3))
Impostarebbe il numero totale di tick nell'asse x su 3 e lo distribuirà uniformemente sull'asse.
C'è anche un bel tutorial su questo
ax = df.plot()
pandas.DataFrame) con indice datetime [2019-01-01, ... 2019-11-01], chiama ax = df.plot(), restituisce un oggetto figura. call ax.xaxis.set_major_locator(plt.MaxNLocator(3)) mostra solo i primi 3 indici [2019-01-01, 2019-01-02, 2019-01-03].
df.plot()spesso visualizza il minor_locator, quindi potresti provare ax1.xaxis.set_minor_locator(plt.MaxNLocator(3)). Ricorda inoltre di sostituire il 3numero di tick che desideri visualizzare. Per i periodi di panda che consiglio import matplotlib.dates as mdatese corro ax.xaxis.set_minor_locator(mdates.MonthLocator(interval = 1))conax.xaxis.set_minor_formatter(mdates.DateFormatter('%m-%Y'))
C'è una set_ticks()funzione per gli oggetti degli assi.
get_xticks()o get_yticks()prima l'oggetto axes, modificarlo in base alle esigenze, quindi passare di nuovo l'elenco a set_ticks().
set_ticks(), ma ho set_xticks()e set_yticks(). Questi sono attributi degli oggetti degli assi, non degli assi. Forse questo è cambiato negli ultimi due anni.
nel caso in cui qualcuno ne abbia ancora bisogno, e poiché nulla qui ha funzionato davvero per me, ho trovato un modo molto semplice che mantiene l'aspetto del diagramma generato "così com'è", fissando il numero di tick esattamente su N:
import numpy as np
import matplotlib.pyplot as plt
f, ax = plt.subplots()
ax.plot(range(100))
ymin, ymax = ax.get_ylim()
ax.set_yticks(np.round(np.linspace(ymin, ymax, N), 2))
ax.set_yticks(np.linspace(int(ymin), int(ymax), N), 2)
La soluzione fornita da @raphael è semplice e molto utile.
Tuttavia, le etichette di spunta visualizzate non saranno valori campionati dalla distribuzione originale ma dagli indici dell'array restituiti da np.linspace(ymin, ymax, N).
Per visualizzare N valori distribuiti uniformemente dalle etichette di spunta originali, utilizzare il set_yticklabels()metodo Ecco uno snippet per l'asse y, con etichette intere:
import numpy as np
import matplotlib.pyplot as plt
ax = plt.gca()
ymin, ymax = ax.get_ylim()
custom_ticks = np.linspace(ymin, ymax, N, dtype=int)
ax.set_yticks(custom_ticks)
ax.set_yticklabels(custom_ticks)
Quando viene utilizzata una scala di registro, è possibile correggere il numero di tick maggiori con il comando seguente
import matplotlib.pyplot as plt
....
plt.locator_params(numticks=12)
plt.show()
Il valore impostato su numticksdetermina il numero di tick dell'asse da visualizzare.
Ringraziamenti al post di @ bgamari per l'introduzione della locator_params()funzione, ma il nticksparametro genera un errore quando viene utilizzata una scala di registro.
pyplot.locator_params(axis = 'x', nbins = 4)(oaxis = 'y') rendere il processo davvero semplice. Grazie @bgamari!