Ich habe zu viele Häkchen in meinem Diagramm und sie laufen ineinander.
Wie kann ich die Anzahl der Zecken reduzieren?
Zum Beispiel habe ich Zecken:
1E-6, 1E-5, 1E-4, ... 1E6, 1E7
Und ich will nur:
1E-5, 1E-3, ... 1E5, 1E7
Ich habe versucht, mit dem zu spielen LogLocator
, aber ich konnte das nicht herausfinden.
python
matplotlib
jlconlin
quelle
quelle
pyplot.locator_params(axis = 'x', nbins = 4)
(oderaxis = 'y'
), sehr einfach war. Danke @bgamari!numticks
anstelle vonnbins
numticks
Lösung für logarithmische Diagramme hinzufügen, auf die @meduz hingewiesen hat?[0, 1, ..., 99]
und jetzt eine gesetzt wirdnticks=10
, werden die neuen spärlichen Beschriftungen entlang der Achse zehnmal so weit voneinander entfernt platziert, dh jetzt1
sitzen, wo9
war,2
wo19
war ... und9
wo99
war.Wenn jemand diese Seite noch in den Suchergebnissen erhält:
quelle
Informationen zum Anpassen des Problems der Anpassung und des Erscheinungsbilds der Ticks finden Sie im Tick Locators- Handbuch auf der matplotlib-Website
ax.xaxis.set_major_locator(plt.MaxNLocator(3))
Würde die Gesamtzahl der Ticks in der x-Achse auf 3 setzen und sie gleichmäßig über die Achse verteilen.
Es gibt auch ein schönes Tutorial dazu
quelle
ax = df.plot()
pandas.DataFrame
) mit datetime index [2019-01-01, ... 2019-11-01] habe, rufe aufax = df.plot()
und gib ein Zahlenobjekt zurück . callax.xaxis.set_major_locator(plt.MaxNLocator(3))
only show first 3 index [2019-01-01, 2019-01-02, 2019-01-03].df.plot()
zeigt oft das anminor_locator
, also möchten Sie es vielleicht versuchenax1.xaxis.set_minor_locator(plt.MaxNLocator(3))
. Denken Sie auch daran,3
die Anzahl der anzuzeigenden Ticks durch die zu ersetzen . Für Pandas Timeseries empfehle ichimport matplotlib.dates as mdates
und laufeax.xaxis.set_minor_locator(mdates.MonthLocator(interval = 1))
mitax.xaxis.set_minor_formatter(mdates.DateFormatter('%m-%Y'))
Es gibt eine
set_ticks()
Funktion für Achsenobjekte.quelle
get_xticks()
oderget_yticks()
zuerst anfordern, nach Bedarf bearbeiten und dann die Liste an übergebenset_ticks()
.set_ticks()
, aber ich habeset_xticks()
undset_yticks()
. Dies sind Attribute von Achsenobjekten, nicht von Achsenobjekten. Vielleicht hat sich dies in den letzten Jahren geändert.Für den Fall, dass es noch jemand braucht und da hier nichts wirklich für mich funktioniert hat, habe ich eine sehr einfache Methode gefunden, mit der das Erscheinungsbild des generierten Plots "wie es ist" beibehalten wird, während die Anzahl der Ticks auf genau N festgelegt wird:
quelle
ax.set_yticks(np.linspace(int(ymin), int(ymax), N), 2)
Die von @raphael gegebene Lösung ist unkompliziert und sehr hilfreich.
Die angezeigten Tick-Beschriftungen sind jedoch keine Werte, die aus der ursprünglichen Verteilung stammen, sondern aus den Indizes des von zurückgegebenen Arrays
np.linspace(ymin, ymax, N)
.Verwenden Sie die
set_yticklabels()
Methode, um N Werte anzuzeigen, die gleichmäßig von Ihren ursprünglichen Tick-Beschriftungen entfernt sind . Hier ist ein Ausschnitt für die y-Achse mit ganzzahligen Beschriftungen:quelle
Wenn eine Protokollskala verwendet wird, kann die Anzahl der Hauptstriche mit dem folgenden Befehl festgelegt werden
Der festgelegte Wert
numticks
bestimmt die Anzahl der anzuzeigenden Achsenticks.Dank an @ bgamaris Beitrag für die Einführung der
locator_params()
Funktion, aber dernticks
Parameter gibt einen Fehler aus, wenn eine Protokollskala verwendet wird.quelle