2011-01-04 14 views
2

Ich versuche, einige Daten in Polarkoordinaten zu plotten, aber ich möchte nicht die Standard-Ticks, Beschriftungen, Achsen usw., die Sie mit der Matplotlib polar() Funktion erhalten. Alles, was ich will, ist die rohe Handlung und sonst nichts, da ich alles mit manuell gezeichneten Patches und Linien handhabe.Mischen von Matplotlib-Patches mit Polarplot?

Hier sind die Optionen, die ich in Betracht gezogen habe:

1) Zeichnen Sie die Daten mit polar(), das überflüssige Material versteckt (mit ax.axes.get_xaxis().set_visible(False), etc.) und dann meine eigenen Achsen Zeichnung (mit Line2D, Circle usw.). Das Problem ist, wenn ich polar() aufrufen und anschließend einen Circle Patch hinzufügen, wird es in Polarkoordinaten gezeichnet und endet wie ein Unendlichkeitssymbol. Auch das Zoomen scheint mit der polar() Funktion nicht zu funktionieren.

2) Überspringen Sie die polar() Funktion und irgendwie meine eigene Polarplot machen manuell Line2D verwenden. Das Problem ist, dass ich nicht weiß, wie man Line2D in Polarkoordinaten zeichnet und nicht herausgefunden hat, wie man eine Transformation dazu benutzt.

Jede Idee, wie ich vorgehen sollte?

Antwort

1

Ihre Option # mit 2 ist wahrscheinlich die einfachste, gegeben, was Sie tun möchten. Sie würden also von polaren in kartesischen Koordinaten, ändern Sie Ihre Funktion in rechtwinkligen Koordinaten bleiben, und Plotten mit plot() (das ist einfacher als mit `Line2D ').

def polar_to_rect(theta, r): 
    return (r*cos(theta), r*sin(theta)) 

und das Plotten mit getan werden kann:

def my_polar(theta, r, *args, **kwargs): 
    """ 
    theta, r -- NumPy arrays with polar coordinates. 
    """ 
    rect_coords = polar_to_rect(theta, r) 
    pyplot.plot(rect_coords[0], rect_coords[1], *args, **kwargs) 
    # You can customize the plot with additional arguments, or use `Line2D` on the points in rect_coords. 
+0

Das funktioniert tatsächlich, danke.Aus Neugierde, weiß jemand, wie ich Matplotlibs Transformationsunterstützung verwenden könnte, um die manuelle Polarumwandlung zu vermeiden? – Roger

0

In Bezug auf Ihren Kommentar über die Verwendung der matplotlib Transformationen

Die Umwandlung Ihrer polaren Funktion in eine rechteckigen verzichtet werden kann. ..I verwendet, um das folgende Verfahren ein Polardiagramm in ein Polygon zu übersetzen, die mich auf dem kartesischen/rechteckigen Achsen ziehen könnte.

import matplotlib.pyplot as plt 

polarPlot = plt.subplot(111, polar = True) 
# Create some dummy polar plot data 
polarData = np.ones((360,2)) 
polarData[:,0] = np.arange(0, np.pi, np.pi/360) * polarData[:,0] 
# Use the polar plot axes transformation into cartesian coordinates 
cartesianData = polarPlot.transProjection.transform(polarData)