Ich benutze Python + Matplotlib und habe zwei Diagramme, die eine Achse teilen. Wenn Sie versuchen, graph1.set_xticklabels([])
während der gemeinsamen Nutzung einer Achse festzulegen, hat dies keine Auswirkung, da sie freigegeben ist. Gibt es eine Möglichkeit, die Achse gemeinsam zu nutzen UND die x-Achse eines Plots auszublenden?
Dies ist ein allgemeines Problem bei der Verwendung von gemeinsamen Achsen.
Glücklicherweise gibt es eine einfache Lösung: Verwenden Sie plt.setp(ax.get_xticklabels(), visible=False)
, um die Beschriftungen auf nur einer Achse unsichtbar zu machen.
Dies ist äquivalent zu [label.set_visible(False) for label in ax.get_xticklabels()]
, für was auch immer es sich lohnt. setp
arbeitet automatisch mit einer Iteration von Matplotlib-Objekten sowie einzelnen Objekten.
Als Beispiel:
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(range(10), 'b-')
ax2 = fig.add_subplot(2,1,2, sharex=ax1)
ax2.plot(range(10), 'r-')
plt.setp(ax1.get_xticklabels(), visible=False)
plt.show()
Pro Thread auf matplotlib-users könnten Sie verwenden
import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
try:
ax.label_outer()
except:
pass
Sie könnten Axes.tick_params () verwenden:
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212, sharex=ax1)
ax1.tick_params(labelbottom=False)
Sie können die Achsen während der Erstellung des Teilplots mit plt.subplots
as teilen
fig, axes = plt.subplots(nrows=2, sharex=True)
Dadurch werden die Ticklabels für innere Achsen automatisch deaktiviert.
Vollständiges Beispiel:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, sharex=True)
axes[0].plot([1,2,3])
axes[1].plot([3,2,1])
plt.show()
Leider darf ich die Antwort von esmit nicht kommentieren (was meiner Meinung nach die beste Lösung ist, danke esmit). Ich muss meinen Kommentar als neue Antwort schreiben: Ich habe seine Lösung in eine einfache Funktion gestellt
def remove_inner_ticklabels(fig):
for ax in fig.axes:
try:
ax.label_outer()
except:
pass
die Sie vor plt.show()
anrufen können. Joe Kingtons Antwort funktionierte aus irgendeinem Grund nicht für mich.