Mayavi: les scènes du cahier Jupyter sont entrelacées

Créé le 26 oct. 2016  ·  10Commentaires  ·  Source: enthought/mayavi

Lorsque je trace une scène après l'autre dans mon cahier jupyter avec le backend x3d - cela se produit :
screen shot 2016-10-26 at 14 29 14

Que dois-je faire pour éviter cela ? (Je suppose que vous voyez le maillage de Out[2] au centre du maillage de Out[8])

PS Peut-être que c'est important - j'exécute mon serveur de bloc-notes jupyter sur la machine distante sous VirtualGL.

Commentaire le plus utile

Salut tout le monde,

désolé d'avoir ajouté des éléments à ce problème clos, mais j'ai pensé que ce serait une bonne occasion de donner un retour sur le projet.
Je viens de tester l'intégration du bloc-notes jupyter à l'aide de x3d et je l'ai fait fonctionner après quelques ratés.
Et j'ai ressenti la même chose que @thoth291 : je m'attendais à ce que mayavi crée implicitement une nouvelle figure pour une nouvelle cellule. Je suppose que je m'y attendais car c'est la valeur par défaut pour matplotlib en utilisant le backend en ligne %matplotlib.
Cependant, vous pouvez également plaider pour le cas contraire : lors de l'utilisation du backend %matplotlib notebook, il faut créer des figures explicitement (sinon, l'action de dessin est effectuée avec la figure précédemment ouverte, ce qui donne parfois des résultats surprenants pour l'utilisateur).

Donc, pour récapituler : différents backends matplotlib se comportent différemment en ce qui concerne la création de nouvelles figures. Du point de vue de l'utilisateur, ce serait plus facile si les chiffres étaient liés aux cellules. Cependant, si l'on suit la suggestion du notebook %matplotlib, on pourrait suivre ce workflow :

fig = mlab.figure() # create new figure
s = mlab.test_triangular_mesh() # draw something on it
fig # display figure

Cela fonctionne réellement, donc peut-être que quelque chose d'utile serait de reformater l'exemple de cahier avec cette façon de travailler, ainsi que la section trucs et astuces qui documente les cahiers jupyter (http://docs.enought.com/mayavi/mayavi/tips. html).

En tout cas, je voudrais ajouter que je pense que c'est génial que ce backend existe. Merci pour le travail acharné @prabhuramachandran @GaelVaroquaux !

Meilleures salutations,
Florian

Tous les 10 commentaires

avez-vous essayé de créer une nouvelle figure dans la nouvelle cellule ?

J'ai fait ça mlab.clf() entre les deux et ça m'a aidé - plus d'entrelacement.
Merci @GaelVaroquaux !

C'est un bug ou c'est une fonctionnalité ? Alors dois-je effacer le chiffre dans tous mes scripts maintenant ?

@thoth291 - C'est la même chose que ce que vous verriez sans le cahier. mlab n'effacera pas l'écran automatiquement et vous devez le faire vous-même. BTW, je suis curieux de connaître votre configuration avec VirtualGL. Quel matériel utilisez-vous et comment avez-vous configuré VirtualGL sur une machine distante ? Cela serait également utile à d'autres et peut-être pourrions-nous l'ajouter à notre documentation si vous pouviez partager les détails.

Je ferme ce problème pour l'instant car ce n'est pas un problème mais comment fonctionne mlab.

Malheureusement ce n'est pas moi qui ai fait le montage.
Tout ce que je peux dire, c'est que nous utilisons des machines Intel HPC avec 60 cœurs, beaucoup de RAM et un bon GPU intégré. Nous avons plusieurs serveurs vnc qui y fonctionnent. Nous utilisons tigervnc et lorsque nous démarrons un serveur, nous le configurons avec le backend VirtualGL. Pendant que vous êtes dans le client vnc, vous devez utiliser un script personnalisé pour exécuter vos applications afin d'intercepter OpenGL et de le remplacer par VirtualGL. Dans mon cas, ce script s'appelle vnc3d et je l'exécute comme ceci :

vnc3d jupyter notebook

Cette configuration fonctionne parfaitement pour nous et la seule chose qui est ennuyeuse est que vous devez vous rappeler d'ajouter ce script vnc3d à votre commande chaque fois que vous traitez avec OpenGL...

@prabhuramachandran , je pense que c'est contre-intuitif pour les utilisateurs de Jupyter. Ou du moins, il devrait être documenté explicitement qu'il faut le faire ( mlab.clf() ) pour assurer un rendu correct. Aucun des moteurs 3D (pour Jupyter) dont j'ai connaissance n'a ce genre de problème.

@prabhuramachandran , je pense que c'est contre-intuitif pour les utilisateurs de Jupyter.

J'ai le même sentiment.

@thoth291 - merci pour les informations sur la configuration de VirtualGL. Cela semble très intéressant et utile. En ce qui concerne le mlab.clf() , je suis heureux de documenter cela bien que je ne sois pas sûr que ce soit un comportement déroutant. C'est vraiment assez similaire à l'utilisation des commandes mlab puis à l'utilisation mlab.savefig . Vous auriez le même effet. Ce qui est peut-être déroutant, c'est que cela est atypique du point de vue de l'utilisation des ordinateurs portables où les utilisateurs font plt.plot() dans une cellule et n'ont pas à clf() avant la cellule suivante. Ce que je peux faire, c'est appeler automatiquement mlab.clf() fois la scène convertie en cellule de sortie PNG ou X3D ? Cela aiderait-il ?

Ouais, c'est la partie déroutante. Peut-être vaut-il la peine de mettre un nouvel argument à l'appel init_notebook lorsque l'utilisateur peut définir quoi faire. Je peux imaginer que de nombreux utilisateurs de mlab seraient très bien d'avoir des chiffres entrelacés (afin qu'ils puissent progressivement construire une scène) - mais le comportement par défaut devrait être d'avoir des chiffres indépendants pour chaque cellule.

Salut tout le monde,

désolé d'avoir ajouté des éléments à ce problème clos, mais j'ai pensé que ce serait une bonne occasion de donner un retour sur le projet.
Je viens de tester l'intégration du bloc-notes jupyter à l'aide de x3d et je l'ai fait fonctionner après quelques ratés.
Et j'ai ressenti la même chose que @thoth291 : je m'attendais à ce que mayavi crée implicitement une nouvelle figure pour une nouvelle cellule. Je suppose que je m'y attendais car c'est la valeur par défaut pour matplotlib en utilisant le backend en ligne %matplotlib.
Cependant, vous pouvez également plaider pour le cas contraire : lors de l'utilisation du backend %matplotlib notebook, il faut créer des figures explicitement (sinon, l'action de dessin est effectuée avec la figure précédemment ouverte, ce qui donne parfois des résultats surprenants pour l'utilisateur).

Donc, pour récapituler : différents backends matplotlib se comportent différemment en ce qui concerne la création de nouvelles figures. Du point de vue de l'utilisateur, ce serait plus facile si les chiffres étaient liés aux cellules. Cependant, si l'on suit la suggestion du notebook %matplotlib, on pourrait suivre ce workflow :

fig = mlab.figure() # create new figure
s = mlab.test_triangular_mesh() # draw something on it
fig # display figure

Cela fonctionne réellement, donc peut-être que quelque chose d'utile serait de reformater l'exemple de cahier avec cette façon de travailler, ainsi que la section trucs et astuces qui documente les cahiers jupyter (http://docs.enought.com/mayavi/mayavi/tips. html).

En tout cas, je voudrais ajouter que je pense que c'est génial que ce backend existe. Merci pour le travail acharné @prabhuramachandran @GaelVaroquaux !

Meilleures salutations,
Florian

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

Questions connexes

stefanoborini picture stefanoborini  ·  11Commentaires

anntzer picture anntzer  ·  7Commentaires

ktavabi picture ktavabi  ·  15Commentaires

aestrivex picture aestrivex  ·  9Commentaires

Mallcock1 picture Mallcock1  ·  10Commentaires