Mayavi: las escenas en el cuaderno Jupyter están intercaladas

Creado en 26 oct. 2016  ·  10Comentarios  ·  Fuente: enthought/mayavi

Cuando trazo una escena tras otra en mi cuaderno jupyter con backend x3d, sucede esto:
screen shot 2016-10-26 at 14 29 14

¿Qué debo hacer para prevenir esto? (Supongo que ves la malla de Out[2] en el centro de la malla de Out[8])

PD Puede ser que sea importante: estoy ejecutando mi servidor portátil jupyter en la máquina remota bajo VirtualGL.

Comentario más útil

Hola a todos,

Perdón por agregar cosas a este problema cerrado, pero pensé que sería una buena oportunidad para dar algunos comentarios sobre el proyecto.
Acabo de probar la integración de jupyter notebook usando x3d y lo hice funcionar después de algunos contratiempos.
Y sentí lo mismo que @ thoth291 : esperaba que mayavi creara una nueva figura para una nueva celda implícitamente. Supongo que esperaba esto porque este es el valor predeterminado para matplotlib usando el backend en línea %matplotlib.
Sin embargo, también podría argumentar a favor del caso contrario: cuando se usa el backend del cuaderno %matplotlib, uno tiene que crear figuras explícitamente (si no, la acción de dibujar se realiza con la figura previamente abierta, lo que a veces produce resultados sorprendentes para el usuario).

Entonces, para recapitular: diferentes backends de matplotlib se comportan de manera diferente con respecto a la creación de nuevas figuras. Desde el punto de vista del usuario, sería más fácil si las cifras estuvieran vinculadas a celdas. Sin embargo, si se sigue la sugerencia del cuaderno %matplotlib, se podría seguir este flujo de trabajo:

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

Esto realmente funciona, por lo que tal vez algo que valga la pena sea reformatear el cuaderno de ejemplo con esta forma de trabajo, así como la sección de consejos y trucos que documenta los cuadernos jupyter (http://docs.enthought.com/mayavi/mayavi/tips. html).

En cualquier caso, me gustaría agregar que creo que es genial que exista este backend. ¡Gracias por el arduo trabajo @prabhuramachandran @GaelVaroquaux !

Atentamente,
florián

Todos 10 comentarios

¿Has intentado crear una nueva figura en la nueva celda?

Hice esto mlab.clf() en el medio y ayudó, no más intercalado.
¡Gracias @GaelVaroquaux !

¿Es un error o es una característica? Entonces, ¿debería borrar la figura en todos mis scripts ahora?

@ thoth291 : esto es lo mismo que vería sin el cuaderno. mlab no borrará la pantalla automáticamente y debe hacerlo usted mismo. Por cierto, tengo curiosidad acerca de su configuración con VirtualGL. ¿Qué hardware está usando y cómo configuró VirtualGL en una máquina remota? Esto también sería útil para otros y tal vez podamos agregarlo a nuestra documentación si pudiera compartir los detalles.

Estoy cerrando este problema por ahora, ya que no es un problema sino cómo funciona mlab.

Desafortunadamente, no soy yo quien hizo la configuración.
Todo lo que puedo decir es que estamos usando máquinas Intel HPC con 60 núcleos, mucha RAM y una buena GPU integrada. Tenemos varios servidores vnc ejecutándose allí. Usamos tigervnc y cuando iniciamos un servidor lo configuramos con el backend VirtualGL. Mientras está en el cliente vnc, debe usar un script personalizado para ejecutar sus aplicaciones para interceptar OpenGL y reemplazarlo con VirtualGL. En mi caso ese script se llama vnc3d y lo ejecuto así:

vnc3d jupyter notebook

Esta configuración funciona perfectamente para nosotros y lo único que es molesto es que debe recordar anteponer este script vnc3d a su comando cada vez que trate con OpenGL...

@prabhuramachandran , creo que esto es contrario a la intuición para los usuarios de Jupyter. O al menos debería documentarse explícitamente que es necesario hacerlo ( mlab.clf() ) para garantizar una representación correcta. Ninguno de los motores 3D (para Jupyter) tengo conocimiento de tener este tipo de problema.

@prabhuramachandran , creo que esto es contrario a la intuición para los usuarios de Jupyter.

Tengo el mismo sentimiento.

@thoth291 : gracias por la información sobre la configuración de VirtualGL. Se ve muy interesante y útil. Con respecto a mlab.clf() , estoy feliz de documentar esto aunque no estoy seguro de que sea un comportamiento confuso. Esto es bastante similar a usar los comandos mlab y luego usar mlab.savefig . Tendrías el mismo efecto. Quizás lo confuso es que esto es atípico desde la perspectiva del uso de portátiles donde los usuarios hacen plt.plot() en una celda y no tienen que hacer clf() antes de la siguiente celda. ¿Qué puedo hacer es llamar automáticamente a mlab.clf() después de que la escena se convierta en una celda de salida PNG o X3D? ¿Eso ayudaría?

Sí, esa es la parte confusa. Puede valer la pena poner un nuevo argumento en la llamada init_notebook cuando el usuario puede definir qué hacer. Puedo imaginar que muchos usuarios de mlab estarían bien con figuras intercaladas (para que puedan construir una escena gradualmente), pero el comportamiento predeterminado debería ser tener figuras independientes para cada celda.

Hola a todos,

Perdón por agregar cosas a este problema cerrado, pero pensé que sería una buena oportunidad para dar algunos comentarios sobre el proyecto.
Acabo de probar la integración de jupyter notebook usando x3d y lo hice funcionar después de algunos contratiempos.
Y sentí lo mismo que @ thoth291 : esperaba que mayavi creara una nueva figura para una nueva celda implícitamente. Supongo que esperaba esto porque este es el valor predeterminado para matplotlib usando el backend en línea %matplotlib.
Sin embargo, también podría argumentar a favor del caso contrario: cuando se usa el backend del cuaderno %matplotlib, uno tiene que crear figuras explícitamente (si no, la acción de dibujar se realiza con la figura previamente abierta, lo que a veces produce resultados sorprendentes para el usuario).

Entonces, para recapitular: diferentes backends de matplotlib se comportan de manera diferente con respecto a la creación de nuevas figuras. Desde el punto de vista del usuario, sería más fácil si las cifras estuvieran vinculadas a celdas. Sin embargo, si se sigue la sugerencia del cuaderno %matplotlib, se podría seguir este flujo de trabajo:

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

Esto realmente funciona, por lo que tal vez algo que valga la pena sea reformatear el cuaderno de ejemplo con esta forma de trabajo, así como la sección de consejos y trucos que documenta los cuadernos jupyter (http://docs.enthought.com/mayavi/mayavi/tips. html).

En cualquier caso, me gustaría agregar que creo que es genial que exista este backend. ¡Gracias por el arduo trabajo @prabhuramachandran @GaelVaroquaux !

Atentamente,
florián

¿Fue útil esta página
0 / 5 - 0 calificaciones