2013-11-27 17 views
6

Ist es möglich, ein Diagramm mit zwei unabhängigen y-Achsen zu erstellen, sodass die Teilstriche übereinstimmen?matplotlib align twinx Teilstriche

Unten ist ein Beispiel für die Hälfte der Lösung. Ich habe die y-Achse mit twinx verdoppelt, aber die Teilstriche sind nicht ausgerichtet und die Gitternetzlinien bilden ein schwieriges Muster auf der Handlung. Gibt es eine Möglichkeit, dass die Teilstriche die gleichen Positionen teilen, aber unterschiedlichen y-Werten entsprechen? Im folgenden Beispiel möchte ich, dass das Häkchen für 5 auf der linken Seite an der gleichen vertikalen Position wie das Häkchen für 6 auf der rechten Seite ist.

import numpy as np 

a = np.random.normal(10, 3, size=20) 
b = np.random.normal(20, 5, size=40) 

fig, ax1 = plt.subplots() 
ax2 = ax1.twinx() 
ax1.hist(a) 
ax2.hist(b) 

histograms

Der übergeordnete Punkt dieser Bewegung ist die Gitterlinien für die beiden Achsen überlappen zu lassen.

Antwort

9

Sie müssen die yticks so einstellen, wie sie ist. Diese werden automatisch berechnet, was zu einer Variation führt. Hinzufügen von etwa wie folgt:

ax1.set_yticks(np.linspace(ax1.get_ybound()[0], ax1.get_ybound()[1], 5)) 
ax2.set_yticks(np.linspace(ax2.get_ybound()[0], ax2.get_ybound()[1], 5)) 

wo wir die ytick Stellen definieren ein Array von 5 Punkten zwischen den Grenzen der Achse verwendet wird. Da Sie ein Histogramm haben könnten Sie einfach den unteren Wert auf Null jeweils gesetzt, und Sie können die obere Grenze etwas größer haben wollen, so würde ich stattdessen

ax1.set_yticks(np.linspace(0, ax1.get_ybound()[1]+1, 5)) 
ax2.set_yticks(np.linspace(0, ax2.get_ybound()[1]+1, 5)) 

Giving ein Grundstück haben (mit einer Änderung der Farbe und Transparenz (alpha) aus Gründen der Klarheit):

enter image description here

+0

Da die Grenzen immer durch zwei Zahlen (sofern nicht undefiniert definiert sind), wird die folgende schafft auch 5 Punkte zwischen den bereits definierten Grenzen der Achse: 'AX1. set_yticks (np.linspace (* ax1.get_ybound(), 5) '. –