Quando eu ploto uma cena após a outra no meu notebook jupyter com backend x3d - isso acontece:
O que devo fazer para evitar isso? (Eu suponho que você veja a malha de Out[2] no centro da malha em Out[8])
PS Pode ser importante - estou executando meu servidor de notebook jupyter na máquina remota no VirtualGL.
você tentou criar uma nova figura na nova célula?
Eu fiz isso mlab.clf()
no meio e ajudou - não há mais intercalação.
Obrigado @GaelVaroquaux !
É um bug ou é um recurso? Então, devo limpar a figura em todos os meus scripts agora?
@thoth291 -- Isso é o mesmo que você veria sem o notebook. mlab
não limpará a tela automaticamente e você deve fazer isso sozinho. BTW, estou curioso sobre sua configuração com o VirtualGL. Qual hardware você está usando e como você configurou o VirtualGL em uma máquina remota? Isso também seria útil para outras pessoas e talvez possamos adicioná-lo à nossa documentação se você puder compartilhar os detalhes.
Estou fechando este problema por enquanto, pois isso não é um problema, mas como o mlab funciona.
Infelizmente não fui eu que fiz a configuração.
Tudo o que posso dizer é que estamos usando máquinas HPC Intel com 60 núcleos, muita RAM e boa GPU a bordo. Temos vários servidores vnc em execução lá. Nós usamos o tigervnc e quando iniciamos um servidor nós o configuramos com o backend VirtualGL. Enquanto você estiver no cliente vnc - você precisa usar um script personalizado para executar seus aplicativos para interceptar o OpenGL e substituí-lo pelo VirtualGL. No meu caso, esse script chamou vnc3d e eu o executo assim:
vnc3d jupyter notebook
Esta configuração funciona perfeitamente para nós e a única coisa que é irritante é que você precisa se lembrar de anexar este script vnc3d ao seu comando toda vez que lidar com OpenGL ...
@prabhuramachandran , acho que isso é contra intuitivo para usuários do Jupyter. Ou pelo menos deve ser documentado explicitamente que é necessário fazer isso ( mlab.clf()
) para garantir a renderização correta. Nenhum dos motores 3D (para Jupyter) estou ciente de ter esse tipo de problema.
@prabhuramachandran , acho que isso é contra intuitivo para usuários do Jupyter.
Eu tenho o mesmo sentimento.
@thoth291 -- obrigado pelas informações sobre a configuração do VirtualGL. Isso parece muito interessante e útil. No que diz respeito ao mlab.clf()
, fico feliz em documentar isso, embora não tenha certeza de que seja um comportamento confuso. Isso é muito semelhante ao uso de comandos mlab e, em seguida, ao uso mlab.savefig
. Você teria o mesmo efeito. Talvez o que seja confuso é que isso é atípico do ponto de vista do uso do notebook, onde os usuários fazem plt.plot()
em uma célula e não precisam clf()
antes da próxima célula. O que posso fazer é chamar automaticamente mlab.clf()
após a cena ser convertida em uma célula de saída PNG ou X3D? Isso ajudaria?
Sim, essa é a parte confusa. Pode valer a pena colocar um novo argumento para a chamada init_notebook quando o usuário pode definir o que fazer. Posso imaginar que muitos usuários de mlab ficariam bem com figuras intercaladas (para que possam construir gradualmente uma cena) - mas o comportamento padrão deve ser ter figuras independentes para cada célula.
Olá a todos,
desculpe por adicionar coisas a esta questão encerrada, mas achei que esta seria uma boa oportunidade para dar algum feedback ao projeto.
Acabei de testar a integração do notebook jupyter usando x3d e consegui que funcionasse depois de alguns contratempos.
E eu senti o mesmo que @ thoth291 : eu esperava que mayavi criasse uma nova figura para uma nova célula implicitamente. Acho que esperava isso porque esse é o padrão para matplotlib usando o back-end embutido %matplotlib.
No entanto, você também pode argumentar pelo caso oposto: ao usar o backend do notebook %matplotlib, é preciso criar figuras explicitamente (se não, a ação de desenho é executada com a figura aberta anteriormente, o que às vezes produz resultados surpreendentes para o usuário).
Então, para recapitular: diferentes back-ends do matplotlib se comportam de maneira diferente em relação à criação de novas figuras. Do ponto de vista do usuário, seria mais fácil se as figuras estivessem vinculadas às células. No entanto, se alguém seguir a sugestão do notebook %matplotlib, poderá seguir este fluxo de trabalho:
fig = mlab.figure() # create new figure
s = mlab.test_triangular_mesh() # draw something on it
fig # display figure
Isso realmente funciona, então talvez valha a pena reformatar o notebook de exemplo com essa maneira de trabalhar, bem como a seção de dicas e truques que documenta os notebooks jupyter (http://docs.enthought.com/mayavi/mayavi/tips. html).
De qualquer forma, gostaria de acrescentar que acho ótimo que esse back-end exista. Obrigado pelo trabalho duro @prabhuramachandran @GaelVaroquaux !
Atenciosamente,
Florian
Comentários muito úteis
Olá a todos,
desculpe por adicionar coisas a esta questão encerrada, mas achei que esta seria uma boa oportunidade para dar algum feedback ao projeto.
Acabei de testar a integração do notebook jupyter usando x3d e consegui que funcionasse depois de alguns contratempos.
E eu senti o mesmo que @ thoth291 : eu esperava que mayavi criasse uma nova figura para uma nova célula implicitamente. Acho que esperava isso porque esse é o padrão para matplotlib usando o back-end embutido %matplotlib.
No entanto, você também pode argumentar pelo caso oposto: ao usar o backend do notebook %matplotlib, é preciso criar figuras explicitamente (se não, a ação de desenho é executada com a figura aberta anteriormente, o que às vezes produz resultados surpreendentes para o usuário).
Então, para recapitular: diferentes back-ends do matplotlib se comportam de maneira diferente em relação à criação de novas figuras. Do ponto de vista do usuário, seria mais fácil se as figuras estivessem vinculadas às células. No entanto, se alguém seguir a sugestão do notebook %matplotlib, poderá seguir este fluxo de trabalho:
Isso realmente funciona, então talvez valha a pena reformatar o notebook de exemplo com essa maneira de trabalhar, bem como a seção de dicas e truques que documenta os notebooks jupyter (http://docs.enthought.com/mayavi/mayavi/tips. html).
De qualquer forma, gostaria de acrescentar que acho ótimo que esse back-end exista. Obrigado pelo trabalho duro @prabhuramachandran @GaelVaroquaux !
Atenciosamente,
Florian