Mayavi: Mayavi unterstützt keine RGB-Tupel als Punktdaten

Erstellt am 22. Nov. 2013  ·  9Kommentare  ·  Quelle: enthought/mayavi

In reinem vtk ist es möglich, Oberflächen zu haben, bei denen point_data.scalars ein vtkUnsignedCharArray ist. Der Renderer interpretiert dies als Bereitstellung eines eigenen RGB- oder RGBA-Werts für jeden Scheitelpunkt und färbt die Oberfläche entsprechend ein, wenn die Einstellungen eingerichtet sind. Mayavi-Objekte lassen dies überhaupt nicht zu, da sie niemals vtkUnsignedCharArrays einrichten.

Schließlich wäre es schön, wenn der Benutzer gültige RGB- oder RGBA-Tupel als Skalare für mlab-Funktionen angibt, die Farben an jedem Punkt den Skalaren entsprechen.

Hilfreichster Kommentar

Keine dieser Antworten allein hat wirklich das getan, was ich wollte, aber schließlich habe ich es herausgefunden, indem ich sie kombiniert habe :)

# Imports
import numpy as np
from mayavi.mlab import quiver3d, draw

# Primitives
N = 200 # Number of points
ones = np.ones(N)
scalars = np.arange(N) # Key point: set an integer for each point

# Define color table (including alpha), which must be uint8 and [0,255]
colors = (np.random.random((N, 4))*255).astype(np.uint8)
colors[:,-1] = 255 # No transparency

# Define coordinates and points
x, y, z = colors[:,0], colors[:,1], colors[:,2] # Assign x, y, z values to match color
pts = quiver3d(x, y, z, ones, ones, ones, scalars=scalars, mode='sphere') # Create points
pts.glyph.color_mode = 'color_by_scalar' # Color by scalar

# Set look-up table and redraw
pts.module_manager.scalar_lut_manager.lut.table = colors
draw()

snapshot

Alle 9 Kommentare

Die Kernentwickler von Mayavi sind an anderer Stelle ziemlich beschäftigt. Ich fürchte das für
Wenn diese Funktionsanforderung eintritt, muss jemand anderes einspringen
und codieren.

Das ist ziemlich in Ordnung. Ich habe es als Feature-Request für die Zukunft gedacht, ich weiß, dass es ein beträchtlicher Arbeitsaufwand ist. Es ist etwas, woran ich versuchen würde zu arbeiten, wenn ich Zeit finde.

Vielen Dank für Ihr Verständnis. Ganz klar die Belegschaft auf
Mayavi reicht nicht aus, um sein ganzes Potenzial auszuschöpfen.

@GaelVaroquaux es wird bald eine Finanzierung für das Projekt geben (ab Q2 nächstes Jahr) !

Ich habe den größten Teil des heutigen Tages mit dem Kopf gegen diese spezielle Wand geschlagen - eine Liste von Punkten in Form von Arrays von [x, y, z, Größe, Farbe] anzugeben, scheint ein so offensichtliches Merkmal zu sein! Warum sollte jemand wollen, dass die Größe der Punkte an die Farbe der Punkte gebunden ist?!

Ihre Anforderungen können die von anderen sein. Mayavi ist darauf aufgebaut
VTK, das als allgemeines Visualisierungs-Toolkit zur Anzeige erstellt wurde
reiche, sich ständig ändernde Daten. Es neigt dazu, Dinge als abstrakt zu betrachten
Größen, die visuellen Eigenschaften von Objekten zugeordnet werden müssen. Mag ich
oder nicht, wir sind ziemlich daran gebunden.

Das Entkoppeln von Größe und Farbe ist jedoch mit etwas Übung problemlos möglich
hack: Letzter Punkt im folgenden Absatz
http://docs.enthought.com/mayavi/mayavi/mlab.html#adding -color-or-size-variations

Danke für die schnelle Antwort. Leider ist dies eine große Einschränkung in Bezug auf Mayavis Fähigkeit, wissenschaftliche Daten darzustellen (siehe z. B. diesen Thread mit dem Zitat "Ich habe auch die Position des Fötus eingenommen und angefangen zu weinen, nachdem ich festgestellt habe, dass die API keine klare / Standardmethode hat" Sonderfarben", was mein Empfinden genau zusammenfasst!). Es scheint, dass die Funktion in VTK möglich ist (zB this ), obwohl es möglicherweise nicht einfach ist, sie in Mayavi zu übersetzen.

(Übrigens, es klingt, als wüssten Sie, was ich hier versuche – ich möchte unterschiedliche Farben für jede unterschiedliche Neuronenpopulation in einem 3D-Modell des Kortex verwenden.)

Hallo Cliff,

Es gibt keine nette API dafür, aber es gibt einige Workarounds, um dies zu tun.

Entweder durch die Verwendung eines tvtk unsigned char-Arrays, wie ich ursprünglich hier vorgeschlagen habe

(sehen
http://stackoverflow.com/questions/19431099/how-to-directly-set-rgb-rgba-colors-in-mayavi,
ist für bestimmte Mayavi-Quellen kompliziert)

Oder indem Sie eine große Farbtabelle einrichten, die jeden möglichen RGB-Wert enthält.

(siehe Antwort von Benutzer eqzx,
http://stackoverflow.com/questions/18537172/specify-absolute-colour-for-3d-points-in-mayavi?rq=3
)

Am Freitag, 15. Mai 2015 um 13:26 Uhr, Cliff Kerr [email protected]
schrieb:

Danke für die schnelle Antwort. Leider ist es eine große Einschränkung in
in Bezug auf Mayavis Fähigkeit, wissenschaftliche Daten darzustellen (siehe z. B. diesen Thread
http://stackoverflow.com/questions/18537172/specify-absolute-colour-for-3d-points-in-mayavi,
mit dem Zitat "Ich habe auch die Position des Fötus eingenommen und angefangen zu weinen
nachdem ich festgestellt habe, dass die API keine klare / standardmäßige Art der Anpassung hat
Farben", was mein Gefühl genau zusammenfasst!). Anscheinend ist das Feature
in VTK möglich (zB dies
http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ColoredPoints),
obwohl es möglicherweise nicht einfach ist, in Mayavi zu übersetzen.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/enthought/mayavi/issues/92#issuecomment -102463748.

Keine dieser Antworten allein hat wirklich das getan, was ich wollte, aber schließlich habe ich es herausgefunden, indem ich sie kombiniert habe :)

# Imports
import numpy as np
from mayavi.mlab import quiver3d, draw

# Primitives
N = 200 # Number of points
ones = np.ones(N)
scalars = np.arange(N) # Key point: set an integer for each point

# Define color table (including alpha), which must be uint8 and [0,255]
colors = (np.random.random((N, 4))*255).astype(np.uint8)
colors[:,-1] = 255 # No transparency

# Define coordinates and points
x, y, z = colors[:,0], colors[:,1], colors[:,2] # Assign x, y, z values to match color
pts = quiver3d(x, y, z, ones, ones, ones, scalars=scalars, mode='sphere') # Create points
pts.glyph.color_mode = 'color_by_scalar' # Color by scalar

# Set look-up table and redraw
pts.module_manager.scalar_lut_manager.lut.table = colors
draw()

snapshot

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen