2016-04-25 11 views
2

Ich habe einen ziemlich großen Datensatz mit Positionen von "Star Particles", die ich mit Matplotlib geplottet habe. Die Daten sind in Spalten organisiert, von denen drei den x-, y- und z-Koordinaten entsprechen. Ich zeichnete die x- und y-Koordinaten auf, aber ich möchte die z-Koordinaten als eine Art Colormap für die Partikel verwenden können. Zum Beispiel haben Partikel mit größeren z-Koordinaten ein niedrigeres Alpha oder sind anders gefärbt. Derzeit sieht mein Code wie folgt aus:Variierende Alpha oder Farben für Pyplot-Marker basierend auf Daten

f = open(input_file) 
line = f.readline() 
line = f.readline() 
px=[] 
py=[] 
pz=[] 
for line in f: 
    ldata = line.split() 
    x = np.float(ldata[2]) 
    y = np.float(ldata[3]) 
    z = np.float(ldata[4]) 
px.append(x) 
py.append(y) 
pz.append(z) 
plt.plot(px,py,'ro',alpha=0.1) 
plt.savefig(output_file) 

Ich bin neu eine Liste von Farben plt.cm. mit Python

+1

die Antworten auf diese sehen viel effizienter als meine ursprüngliche Antwort: http://stackoverflow.com/questions/19139621/python-matplotlib-scatter -plot-changing-color-of-data-point-based-on-given-c? rq = 1 Sie möchten Farben als RGBA übergeben, wobei A den Alpha-Wert definiert. – cphlewis

+0

oft die matplotlib-Galerie ist hilfreich (lädt eine ganze Menge kleiner Bilder): http://matplotlib.org/gallery.html – cphlewis

Antwort

2

erstellen und die Alpha-Werte (letzte Spalte von RGBA-Array) ändern Sie Ihre pz Daten übereinstimmen.

import numpy as np 
import matplotlib.pyplot as plt 

px = np.arange(0,10,0.5) 
py = np.random.randn(20) 
pz = np.arange(0,1,0.05) 
colors = plt.cm.Reds(np.arange(0,1,0.05)) 
colors[:,-1] = pz 

plt.figure() 
plt.scatter(px,py,color=colors) 
plt.show() 

enter image description here

Beachten Sie, dass das Alpha-Schlüsselwort für scatter/plot akzeptiert nur Werte zwischen 0 und 1. Wenn Ihre pz Daten nicht in diesem Bereich liegt, müssen Sie es skalieren oder zu modifizieren, damit dies funktioniert.

EDIT: Herausgegeben Dank von @cphlewis Kommentar und dies sollte

+0

@cphlewis Danke! Machte die Änderungen an meiner Antwort – Nate

+0

Danke eine Tonne. Eine weitere Frage: Wenn ich dies tue und plt.colorbar(). Set_label ('text', rotation = 90) Ich bekomme einen Fehler, der sagt "TypeError: Sie müssen zuerst set_array für mappable ", und ein Leerzeichen Farbbalken, der aussieht, als hätte er zwei Dimensionen. Wie behebe ich das? Um es klar zu stellen, ich bin sowohl die RGB-Werte und die Alpha-Werte auf (verschiedene) Variablen, aber ich wirklich nur darauf achten, dass die RGB-Werte auf der Farbleiste angezeigt werden. Vielen Dank. –

Verwandte Themen