Respuestas:
Alternativamente, si desea establecer simplemente el número de ticks mientras permite que matplotlib los coloque (actualmente solo con MaxNLocator
), haypyplot.locator_params
,
pyplot.locator_params(nbins=4)
Puede especificar un eje específico en este método como se menciona a continuación, el valor predeterminado es ambos:
# 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)
numticks
lugar denbins
numticks
solución para los gráficos logarítmicos como señala @meduz?
[0, 1, ..., 99]
y ahora se establece una nticks=10
, entonces las nuevas etiquetas dispersas se colocarán separadas diez veces más a lo largo del eje, es decir, ahora 1
se ubicarán donde 9
estaba, 2
dónde 19
estaba ... y 9
dónde 99
estaba.
Si alguien aún obtiene esta página en los resultados de búsqueda:
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)
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
ax = df.plot()
pandas.DataFrame
) con índice de fecha y hora [2019-01-01, ... 2019-11-01], llame ax = df.plot()
, devuelva un objeto de figura. la llamada ax.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 el minor_locator
, por lo que es posible que desee probar ax1.xaxis.set_minor_locator(plt.MaxNLocator(3))
. También recuerde sustituir el 3
número de ticks que desea mostrar. Para pandas timeseries recomiendo import matplotlib.dates as mdates
y correr ax.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.
get_xticks()
o get_yticks()
primero para el objeto ejes, editar según sea necesario y luego pasar la lista nuevamente set_ticks()
.
set_ticks()
, pero tengo set_xticks()
y set_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:
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 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:
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)
Cuando se usa una escala logarítmica, el número de tics principales se puede arreglar con el siguiente comando
import matplotlib.pyplot as plt
....
plt.locator_params(numticks=12)
plt.show()
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 el nticks
parámetro arroja un error cuando se usa una escala logarítmica.
pyplot.locator_params(axis = 'x', nbins = 4)
(oaxis = 'y'
) hacer que el proceso sea realmente sencillo. Gracias @bgamari!