2010-06-28 6 views
12

Ich habe eine y-Variable, die ich gegen zwei verwandte x-Achsen auf der oberen und unteren Seite der Figur plotten möchte (zB y = "Anzahl der Dinge im Würfel", x1 = "Seitenlänge des Würfels", x2) = "Volumen des Würfels"). Ich habe y, x1, x2 in numply Arrays. Die Beziehung zwischen meinem x1 und x2 ist eins zu eins und monoton, aber nicht einfach, und sie nehmen in verschiedenen Richtungen zu, wie "Seitenlänge" und "inverses Volumen". Ich habe versucht, mit twiny() und twin(), aber diese scheinen für das Zeichnen verschiedener y-Variablen ausgelegt zu sein. Irgendwelche Ideen? Danke allen!Matplotlib: eine Linie, aufgetragen gegen zwei verwandte x-Achsen in verschiedenen Einheiten?

Unten ist ein Beispiel für die Art von was ich versuche zu tun, außer mit einer einzigen Zeile und nicht mit Symbolen. Die Idee ist, dass, sagen wir, Sigma = 0,4 und M = 2e15 äquivalente und austauschbare Bezeichnungen für einen Punkt sind.

alt text http://img580.imageshack.us/img580/4554/screenshotuy.png

Antwort

8

Für verschiedene x-Skalen verwenden twiny() (man denke an das als "shared y-Achsen"). Ein Beispiel geringfügig von den matplotlib documentation angepasst:

import numpy as np 
import matplotlib.pyplot as plt 

# plot f(x)=x for two different x ranges 
x1 = np.linspace(0, 1, 50) 
x2 = np.linspace(0, 2, 50) 
fig = plt.figure() 

ax1 = fig.add_subplot(111) 
ax1.plot(x1, x1,'b--') 

ax2 = ax1.twiny() 
ax2.plot(x2, x2, 'go') 

plt.show() 

Wenn Sie gerade einem zweiten Achse Plot des zweiten Datensatz als unsichtbar wollten.

ax2.plot(x2, x2, alpha=0) 
+1

Dies zeigt zwei Linien in der gleichen Abbildung, skaliert in Bezug auf verschiedene X-Achsen. Ich versuche, eine Linie, skaliert in Bezug auf die untere x-Achse, zu zeichnen, während die obere x-Achse nur die gleiche Linie in verschiedenen Einheiten angibt. Ich füge ein Beispiel zu meiner Frage hinzu, die sehr ähnlich zu dem ist, was ich tun muss: Varianz auf der Unterseite, Masse auf der Oberseite, Varianz (Masse) und umgekehrt. Danke noch einmal. – Kyle

+0

@Kyle Ich habe die Antwort für diesen Fall aktualisiert. –

+1

Danke. Ok ... das ist näher, aber das Problem ist, dass die zweite Achse effektiv eine neue Handlung ist, die nur der ersten überlagert ist. Meine obere Achse muss über die untere Achse wissen, so dass die Beziehung zwischen den beiden korrekt ist. In meinem Beispieldiagramm kann die Beziehung zwischen M und Sigma kompliziert sein, so dass Sie die Ticks nicht einfach linear zwischen ihren Min und Max teilen lassen können. Es gibt möglicherweise keinen einfachen Weg, dies automatisch in Matplotlib zu tun (obwohl mir gesagt wird, dass es in IDL ... ist). – Kyle

Verwandte Themen