wie man kleine Häkchen nur auf der y-Achse matplotlib einschaltet

77

Wie kann ich die kleinen Häkchen nur auf der y-Achse in einem linearen oder linearen Diagramm drehen?

Wenn ich die Funktion minor_ticks_onzum Aktivieren kleinerer Häkchen verwende, werden diese sowohl auf der x- als auch auf der y-Achse angezeigt.

emad
quelle
44
fand es ..plt.minorticks_on()
drevicko

Antworten:

55

Egal, ich habe es herausgefunden.

ax.tick_params(axis='x', which='minor', bottom=False)
emad
quelle
4
Damit bekomme ich ein MatplotlibDeprecationWarningfür die Verwendung bottom='off'. Anscheinend ax.tick_params(axis='x',which='minor',bottom=False)sollte stattdessen verwendet werden.
Thomas Kühn
29

Hier ist eine andere Möglichkeit, die ich in der matplotlib-Dokumentation gefunden habe :

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

a = np.arange(100)
ml = MultipleLocator(5)
plt.plot(a)
plt.axes().yaxis.set_minor_locator(ml)
plt.show()

Dadurch werden kleinere Häkchen nur auf der y-Achse platziert, da kleinere Häkchen standardmäßig deaktiviert sind.

John Vinyard
quelle
2
Ich würde empfehlen, plt.axes().yaxis.set_minor_locator(MultipleLocator(5))anstatt zuerst zu initialisieren ml. Wenn Sie es wiederverwenden, mlkann dies zu schrecklichen Fehlern führen, die schwer zu finden sind. Die natürlichere Wahl könnte auch sein, AutoMinorLocatorwenn nicht etwas Bestimmtes angefordert wird.
DerWeh
12

So setzen Sie kleinere Häkchen an benutzerdefinierten Orten:

ax.set_xticks([0, 10, 20, 30], minor=True)
Evgeni Sergeev
quelle
11

Um die Vorgehensweise bei der Antwort von @ emad zu verdeutlichen, werden folgende Schritte ausgeführt, um kleinere Häkchen an den Standardpositionen anzuzeigen:

  1. Aktivieren Sie kleinere Häkchen für ein Achsenobjekt, damit die Positionen nach Belieben von Matplotlib initialisiert werden.
  2. Deaktivieren Sie kleinere Zecken, die nicht erwünscht sind.

Ein minimales Beispiel:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
plt.plot([1,2])

# Currently, there are no minor ticks,
#   so trying to make them visible would have no effect
ax.yaxis.get_ticklocs(minor=True)     # []

# Initialize minor ticks
ax.minorticks_on()

# Now minor ticks exist and are turned on for both axes

# Turn off x-axis minor ticks
ax.xaxis.set_tick_params(which='minor', bottom=False)

Alternative Methode

Alternativ können wir kleinere Häkchen an Standardpositionen erhalten, indem wir AutoMinorLocator:

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

fig, ax = plt.subplots()
plt.plot([1,2])

ax.yaxis.set_minor_locator(tck.AutoMinorLocator())

Ergebnis

In beiden Fällen weist das resultierende Diagramm nur auf der y-Achse kleinere Häkchen auf.

Plot mit kleinen Häkchen nur auf der y-Achse

Spinup
quelle
5

Auch wenn Sie nur auf dem tatsächlichen y-Achse kleinere Zecken wollen, anstatt auf den linken und rechten Seiten des Graphen, können Sie die folgen plt.axes().yaxis.set_minor_locator(ml)mit plt.axes().yaxis.set_tick_params(which='minor', right = 'off'), etwa so:

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

a = np.arange(100)
ml = MultipleLocator(5)
plt.plot(a)
plt.axes().yaxis.set_minor_locator(ml)
plt.axes().yaxis.set_tick_params(which='minor', right = 'off')
plt.show()
Marisano
quelle