Tengo demasiados ticks en mi gráfico y se están cruzando.
¿Cómo puedo reducir la cantidad de garrapatas?
Por ejemplo, tengo garrapatas:
1E-6, 1E-5, 1E-4, ... 1E6, 1E7
Y solo quiero:
1E-5, 1E-3, ... 1E5, 1E7
He intentado jugar con el LogLocator
, pero no he podido resolver esto.
python
matplotlib
jlconlin
fuente
fuente
pyplot.locator_params(axis = 'x', nbins = 4)
(oaxis = 'y'
) hacer que el proceso sea realmente sencillo. Gracias @bgamari!numticks
lugar denbins
numticks
solución para los gráficos logarítmicos como señala @meduz?[0, 1, ..., 99]
y ahora se establece unanticks=10
, entonces las nuevas etiquetas dispersas se colocarán separadas diez veces más a lo largo del eje, es decir, ahora1
se ubicarán donde9
estaba,2
dónde19
estaba ... y9
dónde99
estaba.Si alguien aún obtiene esta página en los resultados de búsqueda:
fuente
Para resolver el problema de la personalización y la apariencia de las garrapatas, consulte el guía de Localizadores de garrapatas en el sitio web matplotlib
ax.xaxis.set_major_locator(plt.MaxNLocator(3))
Establecería el número total de ticks en el eje x en 3, y lo distribuiría uniformemente a través del eje.
También hay un buen tutorial sobre esto
fuente
ax = df.plot()
pandas.DataFrame
) con índice de fecha y hora [2019-01-01, ... 2019-11-01], llameax = df.plot()
, devuelva un objeto de figura. la llamadaax.xaxis.set_major_locator(plt.MaxNLocator(3))
solo muestra los primeros 3 índices [2019-01-01, 2019-01-02, 2019-01-03].df.plot()
menudo muestra elminor_locator
, por lo que es posible que desee probarax1.xaxis.set_minor_locator(plt.MaxNLocator(3))
. También recuerde sustituir el3
número de ticks que desea mostrar. Para pandas timeseries recomiendoimport matplotlib.dates as mdates
y correrax.xaxis.set_minor_locator(mdates.MonthLocator(interval = 1))
conax.xaxis.set_minor_formatter(mdates.DateFormatter('%m-%Y'))
Hay una
set_ticks()
función para los objetos del eje.fuente
get_xticks()
oget_yticks()
primero para el objeto ejes, editar según sea necesario y luego pasar la lista nuevamenteset_ticks()
.set_ticks()
, pero tengoset_xticks()
yset_yticks()
. Estos son atributos de objetos de ejes, no ejes. Tal vez esto ha cambiado durante los últimos años.en caso de que alguien aún lo necesite, y dado que nada aquí realmente funcionó para mí, se me ocurrió una forma muy simple que mantiene la apariencia de la trama generada "tal cual" mientras fija el número de tics exactamente N:
fuente
ax.set_yticks(np.linspace(int(ymin), int(ymax), N), 2)
La solución que dio @raphael es sencilla y bastante útil.
Aún así, las etiquetas de marca mostradas no serán valores muestreados de la distribución original sino de los índices de la matriz devueltos por
np.linspace(ymin, ymax, N)
.Para mostrar los valores de N espaciados uniformemente de sus etiquetas de marca original, utilice el
set_yticklabels()
método Aquí hay un fragmento para el eje y, con etiquetas enteras:fuente
Cuando se usa una escala logarítmica, el número de tics principales se puede arreglar con el siguiente comando
El valor establecido en
numticks
determina el número de marcas de eje que se mostrarán.Créditos a la publicación de @ bgamari para introducir la
locator_params()
función, pero elnticks
parámetro arroja un error cuando se usa una escala logarítmica.fuente