Mayavi: Mayavi ne prend pas en charge les tuples RVB en tant que données ponctuelles

Créé le 22 nov. 2013  ·  9Commentaires  ·  Source: enthought/mayavi

En vtk pur, il est possible d'avoir des surfaces où point_data.scalars est un vtkUnsignedCharArray. Le moteur de rendu interprétera cela comme fournissant une valeur RVB ou RVBA distincte pour chaque sommet et colorera la surface en conséquence si les paramètres sont définis. Les objets Mayavi ne vous permettent pas du tout de le faire car ils ne configurent jamais vtkUnsignedCharArrays.

Finalement, ce serait bien de l'avoir pour que si l'utilisateur spécifie des tuples RVB ou RVBA valides comme scalaires pour les fonctions mlab, les couleurs à chaque point seraient conformes aux scalaires.

Commentaire le plus utile

Aucune de ces réponses seules n'a vraiment fait ce que je voulais, mais finalement je l'ai compris en les combinant :)

# 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

Tous les 9 commentaires

Les développeurs principaux de Mayavi sont assez occupés ailleurs. j'ai peur que pour
cette demande de fonctionnalité se produise, quelqu'un d'autre va devoir intervenir
et coder.

C'est tout à fait correct. Je l'ai conçu comme une demande de fonctionnalité pour l'avenir, je sais que c'est une quantité de travail considérable. C'est quelque chose sur lequel j'essaierais de travailler, si je peux trouver le temps.

Merci beaucoup d'avoir été si compréhensif. De toute évidence, la main-d'œuvre sur
Mayavi ne suffit pas à réaliser tout son potentiel.

@GaelVaroquaux, il y aura bientôt un financement sur le projet (à partir du deuxième trimestre de l'année prochaine) !

Je me suis cogné la tête contre ce mur particulier pendant la majeure partie de la journée - spécifier une liste de points en termes de tableaux de [x, y, z, taille, couleur] semble être une caractéristique tellement évidente ! Pourquoi quelqu'un voudrait-il que la taille des points soit verrouillée sur la couleur des points ? !

Votre ensemble d'exigences peut être celui des autres. Mayavi est construit sur
VTK, qui a été créé comme une boîte à outils de visualisation générale pour afficher
des données riches en variation continue. Il a tendance à considérer les choses comme abstraites
quantités qui doivent être mappées aux propriétés visuelles des objets. J'aime ça
ou non, nous y sommes à peu près liés.

Cela dit, le découplage de la taille et de la couleur est facilement possible avec un peu de
hack : dernier élément du paragraphe suivant
http://docs.enthought.com/mayavi/mayavi/mlab.html#adding -color-or-size-variations

Merci pour la réponse rapide. Malheureusement, c'est une limitation majeure en termes de capacité de Mayavi à tracer des données scientifiques (voir par exemple ce fil , avec la citation "J'ai également pris la position fœtale et j'ai commencé à pleurer après avoir réalisé que l'API n'a pas de moyen clair/par défaut de couleurs personnalisées", ce qui résume exactement mon sentiment !). Il semble que la fonctionnalité soit possible dans VTK (par exemple, this ), bien qu'elle ne soit pas facile à traduire en Mayavi.

(Par ailleurs, il semble que vous sachiez ce que j'essaie de faire ici - je souhaite utiliser des couleurs différentes pour chaque population différente de neurones dans un modèle 3D du cortex.)

Salut Cliff,

Il n'y a pas de belle API pour cela, mais il existe des solutions de contournement pour le faire.

Soit en utilisant un tableau de caractères tvtk non signé comme je l'ai initialement suggéré ici

(voir
http://stackoverflow.com/questions/19431099/how-to-directly-set-rgb-rgba-colors-in-mayavi,
est compliqué pour certaines sources mayavi)

Ou en mettant en place une grande table de couleurs qui contient toutes les valeurs RVB possibles.

(voir réponse de l'utilisateur eqzx,
http://stackoverflow.com/questions/18537172/specify-absolute-colour-for-3d-points-in-mayavi?rq=3
)

Le vendredi 15 mai 2015 à 13:26, Cliff Kerr [email protected]
a écrit:

Merci pour la réponse rapide. Malheureusement, il s'agit d'une limitation majeure de
termes de la capacité de Mayavi à tracer des données scientifiques (voir par exemple ce fil
http://stackoverflow.com/questions/18537172/specify-absolute-colour-for-3d-points-in-mayavi,
avec la citation "J'ai aussi pris la position fœtale et j'ai commencé à pleurer
après avoir réalisé que l'API n'a pas de moyen clair/par défaut de personnalisation
couleurs", ce qui résume exactement mon sentiment !). Il semble que la caractéristique soit
possible dans VTK (par exemple, ce
http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ColoredPoints),
bien que cela ne soit pas facile à traduire en Mayavi.

-
Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/enthought/mayavi/issues/92#issuecomment -102463748.

Aucune de ces réponses seules n'a vraiment fait ce que je voulais, mais finalement je l'ai compris en les combinant :)

# 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

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

Kekushke picture Kekushke  ·  9Commentaires

indranilsinharoy picture indranilsinharoy  ·  9Commentaires

PennyQ picture PennyQ  ·  4Commentaires

dnacombo picture dnacombo  ·  7Commentaires

relyativist picture relyativist  ·  16Commentaires