2015-03-25 5 views
6

Ich renne die folgende Funktion:Labels anzeigen tick, wenn teilen eine Achse in matplotlib

def plot_variance_analysis(indices, stat_frames, legend_labels, shape): 
    x = np.linspace(1, 5, 500) 
    fig, axes = plt.subplots(shape[0], shape[1], sharex=True sharey=True) 
    questions_and_axes = zip(indices, axes.ravel()) 
    frames_and_labels = zip(stat_frames, legend_labels) 
    for qa in questions_and_axes: 
     q = qa[0] 
     ax = qa[1] 
     for fl in frames_and_labels: 
      frame = fl[0] 
      label = fl[1] 
      ax.plot(x, stats.norm.pdf(x, frame['mean'][q], frame['std'][q]), label=label) 
      ax.set_xlabel(q) 
      ax.legend(loc='best') 
    plt.xticks([1,2,3,4,5]) 
    return fig, axes 

Hier ist, was ich mit einigen meiner eigenen Beispieldaten erhalten:

enter image description here

I‘ m versucht, den gemeinsamen Zustand zwischen den Achsen beizubehalten, aber gleichzeitig die Hilfsstrichsbeschriftungen für die x-Achse auf alle Unterplot (einschließlich der oberen beiden) anzuzeigen. Ich finde keine Möglichkeit, dies in der Dokumentation auszuschalten. Irgendwelche Vorschläge? Oder sollte ich einfach die x-Tick-Etiketten Achse für Achse setzen?

Ich laufe Matplotlib 1.4.0, wenn das wichtig ist.

Antwort

14

Die Zecken, die ihren visible Eigenschaftssatz fehlen haben False haben. Dies wird in der Dokumentation für plt.subplot angegeben. Der einfachste Weg, dies zu beheben, ist wahrscheinlich zu tun:

for ax in axes.flatten(): 
    for tk in ax.get_yticklabels(): 
     tk.set_visible(True) 
    for tk in ax.get_xticklabels(): 
     tk.set_visible(True) 

Hier habe ich alle Achsen geschlungen über, was Sie tun müssen nicht unbedingt zu, aber der Code ist einfacher auf diese Weise. Sie könnten auch mit Listenkomprehensionen in einem hässlichen einzeiler dies tun, wenn Sie mögen:

[([tk.set_visible(True) for tk in ax.get_yticklabels()], [tk.set_visible(True) for tk in ax.get_yticklabels()]) for ax in axes.flatten()] 
+0

ich dies in einer Funktion eingewickelt und es funktionierte genau wie oben – jimh

+1

gezeigt Dies ist nicht mehr zu arbeiten scheint. Irgendwelche Ideen, wie Sie diese Post Matplotlib 2.0 erreichen? – MeshachBlue

+0

Ich habe mich nicht um die Überprüfung von 2.0 gekümmert, aber in MPL 2.1.2 funktioniert das. Die Ticklabels sind jedoch standardmäßig auf allen Achsen sichtbar. Dieser Trick sollte also nur notwendig sein, um die Ticklabels mit 'tk.set_visible (False)' zu verstecken. – farenorth

Verwandte Themen