it-swarm.com.de

matplotlib teilt die x-Achse, zeigt jedoch keine Beschriftungen für x-Achsen-Ticks für beide an, nur eine

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?

73
thenickname

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()

alt text

100
Joe Kington

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
39
esmit

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)
9
truhanen

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()

 enter image description here

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.

0
Mitch