Dies ist ein häufiges Problem bei der Verwendung von gemeinsam genutzten Achsen.
Glücklicherweise gibt es eine einfache Lösung: Verwenden Sie diese Option plt.setp(ax.get_xticklabels(), visible=False)
, um die Beschriftungen auf nur einer Achse unsichtbar zu machen.
Dies ist gleichbedeutend mit [label.set_visible(False) for label in ax.get_xticklabels()]
, was auch immer es wert ist. setp
arbeitet automatisch mit einer iterierbaren Anzahl 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()
plt.setp(ax2.get_yticklabels(), visible=True)
. Hat einwandfrei funktioniert.Pro Thread auf matplotlib-Benutzern könnten Sie verwenden
import matplotlib.pyplot as plt for ax in plt.gcf().axes: try: ax.label_outer() except: pass
quelle
try
benötigt? Es scheint gut ohne es.try
wird benötigt, da nichtplt.gcf().axes
garantiert wird, dass nicht alle Elemente der Listesubplot
Instanzen sind (mit einerlabel_outer
Methode).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)
quelle
Sie können die Achsen während der Erstellung des Unterplots mit
plt.subplots
as teilenfig, axes = plt.subplots(nrows=2, sharex=True)
Dadurch werden die Ticklabels für die Innenachsen automatisch ausgeschaltet.
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()
quelle
label_outer()
scheint zu funktionieren stackoverflow.com/a/12751192/125507Leider darf ich die Antwort von esmit nicht kommentieren (was meiner Meinung nach die beste Lösung ist, danke esmit), daher muss ich 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 vorher anrufen können
plt.show()
. Joe Kingtons Antwort hat aus irgendeinem Grund bei mir nicht funktioniert.quelle