Wie kann ich ein Streudiagramm mit Konturdichtelinien in Polarkoordinaten mit Matplotlib zeichnen?

8

Ich versuche, ein Streudiagramm in Polarkoordinaten mit den Konturlinien zu erstellen, die der Punktwolke überlagert sind. Mir ist bewusst, wie man das in kartesischen Koordinaten mit numpy.histogram2d :

macht %Vor%

Die Ausgabe ist hier:

Wenn ich jedoch versuche, meinen Code in Polarkoordinaten zu transponieren, bekomme ich verzerrte Höhenlinien. Hier ist mein Code und die produzierte (falsche) Ausgabe:

%Vor%

Die falsche Ausgabe ist hier:

Gibt es eine Möglichkeit, die Konturlinien im richtigen Maßstab zu haben?

BEARBEITEN, um Vorschläge in Kommentaren zu adressieren.

EDIT2: Jemand hat vorgeschlagen, dass die Frage ein Duplikat von diese Frage sein könnte. Obwohl ich erkenne, dass die Probleme ähnlich sind, befasst sich meins speziell mit dem Zeichnen der Dichtekonturen von Punkten über einem Streudiagramm. Die andere Frage ist, wie man die Konturniveaus einer beliebigen Menge, die zusammen mit den Koordinaten der Punkte angegeben ist, darstellt.

    
BrownianRatchet 08.06.2015, 15:43
quelle

1 Antwort

13

Das Problem ist, dass Sie nur die Kanten des Arrays konvertieren. Indem Sie nur die X- und Y-Koordinaten der Kanten konvertieren, konvertieren Sie effektiv die Koordinaten einer diagonalen Linie über das 2D-Array. Diese Zeile hat einen sehr kleinen Bereich von theta -Werten und Sie wenden diesen Bereich auf das gesamte Raster an.

Die schnelle (aber falsche) Korrektur

In den meisten Fällen könnten Sie das gesamte Gitter (d. h. 2D-Arrays von x und y , 2D-Arrays von theta und r ) in Polarkoordinaten konvertieren.

Anstelle von:

%Vor%

Machen Sie etwas Ähnliches wie:

%Vor%

Als vollständiges Beispiel:

%Vor%

Sie werden jedoch feststellen, dass dies etwas falsch aussieht. Das liegt daran, dass ax.contour implizit davon ausgeht, dass sich die Eingabedaten in einem regulären Raster befinden. Wir haben ihm ein reguläres Gitter in kartesischen Koordinaten gegeben, aber kein reguläres Gitter in Polarkoordinaten. Es wird davon ausgegangen, dass wir ein regelmäßiges Gitter in Polarkoordinaten passiert haben. Wir könnten das Raster neu berechnen, aber es gibt einen einfacheren Weg.

Die richtige Lösung

Um das 2D-Histogramm korrekt zu zeichnen, berechnen Sie das Histogramm im Polarraum.

Nehmen Sie beispielsweise Folgendes vor:

%Vor%

Als vollständiges Beispiel:

%Vor%

Schließlich können Sie eine leichte Verschiebung des obigen Ergebnisses feststellen. Dies hat mit zellenorientierten Gitterkonventionen zu tun ( x[0,0], y[0,0] gibt die Mitte der Zelle an) gegenüber kantenorientierten Gitterkonventionen ( x[0,0], y[0,0] gibt die untere linke Ecke der Zelle an.% Co_de% erwartet Dinge als Zelle -zentriert, aber Sie geben ihm Kanten-ausgerichtete X- und Y-Werte.

Es ist nur eine Verschiebung um eine halbe Zelle, aber wenn Sie es beheben möchten, tun Sie etwas wie:

%Vor%

    
Joe Kington 08.06.2015, 17:17
quelle