771 Stimmen

Ändern der Tickfrequenz auf der x- oder y-Achse

Ich versuche zu reparieren, wie Python meine Daten aufzeichnet. Sagen wir:

x = [0,5,9,10,15]
y = [0,1,2,3,4]

matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()

Die Ticks der X-Achse werden in 5er-Intervallen aufgetragen. Gibt es eine Möglichkeit, Intervalle von 1 darzustellen?

911voto

unutbu Punkte 769083

Sie können explizit festlegen, wo Sie Markierungen ankreuzen möchten, indem Sie plt.xticks :

plt.xticks(np.arange(min(x), max(x)+1, 1.0))

Zum Beispiel,

import numpy as np
import matplotlib.pyplot as plt

x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
plt.show()

( np.arange wurde anstelle von Pythons range Funktion nur für den Fall min(x) y max(x) sind Floats statt Ints).


En plt.plot (oder ax.plot ) wird automatisch der Standardwert x y y Grenzen. Wenn Sie diese Grenzen beibehalten und nur die Schrittweite der Tickmarks ändern möchten, können Sie Folgendes verwenden ax.get_xlim() um herauszufinden, welche Grenzen Matplotlib bereits gesetzt hat.

start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, stepsize))

Der Standard-Tick-Formatierer sollte die Tick-Werte auf eine vernünftige Anzahl signifikanter Stellen runden. Wenn Sie jedoch mehr Kontrolle über das Format haben möchten, können Sie Ihr eigenes Formatierungsprogramm definieren. Zum Beispiel,

ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))

Hier ist ein lauffähiges Beispiel:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, 0.712123))
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
plt.show()

300voto

robochat Punkte 3367

Ein anderer Ansatz ist die Einstellung der Achsenlokalisierung:

import matplotlib.ticker as plticker

loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervals
ax.xaxis.set_major_locator(loc)

Es gibt verschiedene Arten von Ortungsgeräten, je nach Ihren Bedürfnissen.

Hier ist ein vollständiges Beispiel:

import matplotlib.pyplot as plt
import matplotlib.ticker as plticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervals
ax.xaxis.set_major_locator(loc)
plt.show()

200voto

jthomas Punkte 2389

Mir gefällt diese Lösung (aus dem Matplotlib Plotten Kochbuch ):

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]

tick_spacing = 1

fig, ax = plt.subplots(1,1)
ax.plot(x,y)
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
plt.show()

Mit dieser Lösung können Sie den Abstand der Häkchen über die Zahl, die Sie in ticker.MultipleLocater() Sie ermöglicht eine automatische Grenzwertbestimmung und ist später leicht ablesbar.

160voto

glopes Punkte 3638

Falls jemand an einem allgemeinen Einzeiler interessiert ist, holen Sie sich einfach die aktuellen Ticks und setzen Sie damit die neuen Ticks, indem Sie jeden zweiten Tick abfragen.

ax.set_xticks(ax.get_xticks()[::2])

56voto

Gary Steele Punkte 591

Wenn Sie nur die Abstände festlegen wollen, einen einfachen Einzeiler mit minimalem Textbaustein:

plt.gca().xaxis.set_major_locator(plt.MultipleLocator(1))

funktioniert auch bei kleineren Zecken problemlos:

plt.gca().xaxis.set_minor_locator(plt.MultipleLocator(1))

ein bisschen vollmundig, aber ziemlich kompakt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X