mayavi: eigenes Farbschema/colormap

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mushroom
User
Beiträge: 58
Registriert: Sonntag 21. November 2010, 12:32

Hallo,

ich habe für eine gegebene Zahl an Atomen eine farbliche Zuordnung anhand ihrer Ordnungszahl getroffen. Die entsprechenden Farben sind in der Liste colmap abgelegt. Nun wollte ich über den LUT-Manager entsprechend die Farben zuordnen, verstehe das Prinzip dieses Managers bzw. der Erstellung einer eigen colormap nicht. Mir scheint dies auch nicht der richtige Weg zu sein, da ja in lut 'lediglich' 256 Farbwerte stehen und die Zahl der Listenelemente in colmap diese auch überschreiten könnte.

Wie kann ich jedem Atom bzw. jeder Ordnungszahl seine eigene Farbe zuordnen? Herhalten soll übrigens das JMol-Farbschema.

Code: Alles auswählen

from enthought.mayavi import mlab

x = [0,0.0,0.5]
y = [0,1.0,0.5]
z = [0,0.0,0.5]
s = [.8, .70, .50]
colmap = [(255,0,0),(0,255,0),(0,0,255)] #Farbtabelle, Zahl der Tupel in Abhängigkeit von Zahl der Koordinaten

mol = mlab.points3d(x, y, z, s, resolution=20, scale_factor=1)

lut = mol.module_manager.scalar_lut_manager.lut.table.to_array()

for i in range(0,len(colmap)): #Schreibe Farbwerte aus colmap in lut
    print i
    lut[i,0] = colmap[i][0]
    lut[i,1] = colmap[i][1]
    lut[i,2] = colmap[i][2]
    print colmap[i]
    print lut[i]
for i in range(len(colmap),256): #Fülle den Rest mit Nullen
    lut[i,:] = 0
print lut

mol.module_manager.scalar_lut_manager.lut.table = lut

mlab.show()
mushroom
User
Beiträge: 58
Registriert: Sonntag 21. November 2010, 12:32

So, nach einigem rumprobieren, bin ich zunächst erstmal auf folgende recht simple Lösung gestoßen:

Code: Alles auswählen

from enthought.mayavi import mlab

x = [0,0.0,0.5,1]
y = [0,1.0,0.5,1]
z = [0,0.0,0.5,1]
s = [.8, .70, .50, .2]
colmap = [(0,0,0,255),(0,255,0,255),(0,0,255,255),(0,0,255,255)] #Farbtabelle, Zahl der Tupel in Abhängigkeit von Zahl der Koordinaten

mol = mlab.points3d(x, y, z, s, resolution=20, scale_factor=1)
mol.module_manager.scalar_lut_manager.lut.table = colmap

mlab.show()
Allerdings werden die in colmap vorgegebene Reihenfolge der Farben genau falschrum angewendet. Weiß jemand, ob dies ein standardmäßiges Vorgehen für mein Problem ist, insbesondere wegen der falschen Reihenfolge?

edit: Hmm, neben der Reihenfolge passt noch was nicht. Ändere ich den letzten Farbcode in colmap erhalte ich statt vier erwarteter Farben nur drei.

Code: Alles auswählen

colmap = [(0,0,0,255),(0,255,0,255),(0,0,255,255),(255,0,255,255)]
Antworten