Wie fügt man Farbbalken zu Scatterplots hinzu, die so erstellt wurden?

8

Ich erstelle Streudiagramme mit Code, der im Wesentlichen so aussieht

%Vor%

Meine Frage ist das:

  

Was muss ich dem obigen Code hinzufügen, um eine vertikale Farbleiste (die Farbkarte in cmap ) entlang der rechten Kante des Diagramms zu erhalten?

HINWEIS : Ich finde Matplotlib absolut unverständlich . Dies gilt sowohl für das Design als auch für die Dokumentation. (Nicht aus Mangel an Versuch: Ich habe viel Zeit, Mühe und sogar etwas Geld hineingesteckt.) Also würde ich den vollständigen, funktionierenden Code schätzen (auch wenn es nur ein Spielzeug-Beispiel ist), weil ich höchstwahrscheinlich gewonnen habe ' t in der Lage sein, ausgelassene Details zu füllen oder Fehler im Code zu beheben.

EDIT: Ich habe eine wichtige Lücke in der obigen "Codeskizze" behoben, nämlich eine datensatzspezifische Markierungsspezifikation bei jedem Aufruf von ax.scatter . Dies ist der Grund für das Erstellen des Streudiagramms mit mehreren Aufrufen von ax.scatter , obwohl man zumindest die Anzahl der zu streuenden Aufrufe auf eine pro verwendete Maker-Form reduzieren könnte; z.B.

%Vor%

Ich habe versucht, den gleichen Trick zu verwenden, um alle Aufrufe von ax.scatter auf eins zu reduzieren (indem eine Sequenz von Markern als Argument marker übergeben wird), wie folgt:

%Vor%

... aber das scheitert. Der Fehler geht in etwa so (nachdem einige lange Pfade beschnitten wurden):

%Vor%

AFAICT, tcaswells Rezept erfordert das Reduzieren der Aufrufe von ax.scatter auf einen einzelnen, aber diese Anforderung scheint mit meiner absoluten Anforderung für mehrere Markerformen im selben Streudiagramm zu kollidieren.

    
kjo 18.12.2012, 23:29
quelle

3 Antworten

8

Wenn Sie für jeden Satz einen anderen Marker verwenden müssen, müssen Sie ein wenig mehr Arbeit leisten und alle clims dazu zwingen, gleich zu sein (sonst wird standardmäßig von dem Min / Max-Wert des% skaliert co_de% Daten pro Streudiagramm).

%Vor%

Die c legt die Breite des Rahmens auf den Formen fest. Ich finde, dass der schwarze Rahmen bei kleinen Formen die Farbe der Füllung überfordern kann.

Wenn Sie nur eine Form benötigen, können Sie dies alles mit einem einzigen Streudiagramm tun, es ist nicht notwendig, für jeden Durchlauf durch Ihre Schleife eine separate zu erstellen.

%Vor%

Sobald Sie alle Daten in ein 1D-Array übertragen haben, erstellen Sie das Streudiagramm und behalten Sie den zurückgegebenen Wert bei:

%Vor%

Sie erstellen dann Ihren Farbbalken und übergeben das von linewidths=0 zurückgegebene Objekt als erstes Argument.

%Vor%

Sie müssen dies tun, damit die Farbleiste weiß, welche Farbkarte (sowohl die Karte als auch der Bereich) verwendet werden soll.

    
tacaswell 19.12.2012 05:21
quelle
5

Ich denke, deine beste Wette wird darin bestehen, deine Daten in einen Pandas-Datenrahmen zu stecken und alle deine Marker wie folgt zu durchlaufen:

%Vor%

    
Paul H 21.12.2012 01:59
quelle
1

Ich denke, das sollte den Trick machen. Ich bin mir ziemlich sicher, dass ich das vor einiger Zeit aus einem der Matplotlib-Kochbuch-Beispiele genommen habe, aber ich kann es jetzt anscheinend nicht finden ...

%Vor%     
Josha Inglis 19.12.2012 02:44
quelle

Tags und Links