Mayavi: сцены в блокноте Jupyter чередуются

Созданный на 26 окт. 2016  ·  10Комментарии  ·  Источник: enthought/mayavi

Когда я рисую одну сцену за другой в своем блокноте Jupyter с бэкэндом x3d, происходит следующее:
screen shot 2016-10-26 at 14 29 14

Что мне делать, чтобы предотвратить это? (Я предполагаю, что вы видите сетку из Out[2] в центре сетки в Out[8])

PS Может быть, это важно - я запускаю свой сервер ноутбука jupyter на удаленной машине под VirtualGL.

Самый полезный комментарий

Всем привет,

извините, что добавляю некоторые вещи в этот закрытый вопрос, но я подумал, что это будет хорошая возможность оставить отзыв о проекте.
Я только что протестировал интеграцию ноутбука Jupyter с помощью x3d и заставил ее работать после нескольких сбоев.
И я чувствовал то же, что и @thoth291 : я ожидал, что Mayavi неявно создаст новую фигуру для новой ячейки. Думаю, я ожидал этого, потому что это значение по умолчанию для matplotlib, использующее встроенный бэкэнд %matplotlib.
Однако можно привести и противоположный случай: при использовании бэкенда блокнота %matplotlib необходимо явно создавать фигуры (в противном случае действие рисования выполняется с ранее открытой фигурой, что иногда дает неожиданные результаты для пользователя).

Итак, резюмируем: разные бэкэнды matplotlib ведут себя по-разному в отношении создания новых фигур. С точки зрения пользователя было бы проще, если бы цифры были привязаны к ячейкам. Однако, если следовать предложению ноутбука %matplotlib, можно следовать этому рабочему процессу:

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

Это действительно работает, поэтому, возможно, стоит переформатировать пример блокнота таким образом, а также раздел с советами и рекомендациями, в котором описаны блокноты Jupyter (http://docs.enthought.com/mayavi/mayavi/tips. html).

В любом случае, я хотел бы добавить, что я думаю, что это здорово, что этот бэкэнд существует. Спасибо за тяжелую работу @prabhuramachandran @GaelVaroquaux !

С наилучшими пожеланиями,
Флориан

Все 10 Комментарий

Вы пытались создать новую фигуру в новой ячейке?

Я сделал это mlab.clf() между ними, и это помогло - больше никакого чередования.
Спасибо @GaelVaroquaux !

Это баг или фича? Так что мне теперь очищать фигуру во всех моих скриптах?

@ thoth291 -- Это то же самое, что и без блокнота. mlab не очистит экран автоматически, и вы должны сделать это самостоятельно. Кстати, мне любопытно, как вы настроили VirtualGL. Какое оборудование вы используете и как вы настроили VirtualGL на удаленной машине? Это будет полезно и другим, и, возможно, мы сможем добавить это в нашу документацию, если вы поделитесь подробностями.

Я закрываю этот вопрос на данный момент, так как это не проблема, а то, как работает mlab.

К сожалению, я не тот, кто сделал настройку.
Все, что я могу сказать, это то, что мы используем HPC-машины Intel с 60 ядрами, большим объемом оперативной памяти и хорошим графическим процессором на борту. У нас там работает несколько серверов vnc. Мы используем tigervnc, и когда мы запускаем сервер, мы настраиваем его с бэкэндом VirtualGL. Пока вы находитесь в клиенте vnc, вам нужно использовать собственный скрипт для запуска ваших приложений, чтобы перехватить OpenGL и заменить его на VirtualGL. В моем случае этот скрипт называется vnc3d, и я запускаю его так:

vnc3d jupyter notebook

Эта настройка отлично работает для нас, и единственное, что раздражает, это то, что вы должны помнить о добавлении этого скрипта vnc3d к вашей команде каждый раз, когда вы имеете дело с OpenGL...

@prabhuramachandran , я думаю, что это нелогично для пользователей Jupyter. Или, по крайней мере, должно быть явно задокументировано, что это необходимо сделать ( mlab.clf() ) для обеспечения правильного рендеринга. Ни один из 3D-движков (для Jupyter) не знает о такой проблеме.

@prabhuramachandran , я думаю, что это нелогично для пользователей Jupyter.

У меня такое же чувство.

@ thoth291 - спасибо за информацию о настройке VirtualGL. Это выглядит очень интересно и полезно. Что касается mlab.clf() , я рад задокументировать это, хотя я не уверен, что это сбивает с толку. Это действительно очень похоже на использование команд mlab, а затем на использование mlab.savefig . У вас будет такой же эффект. Возможно, сбивает с толку то, что это нетипично с точки зрения использования ноутбука, когда пользователи делают plt.plot() в одной ячейке и не должны clf() перед следующей ячейкой. Что я могу сделать, так это автоматически вызвать mlab.clf() после преобразования сцены в выходную ячейку PNG или X3D? Это поможет?

Да, это запутанная часть. Возможно, стоит добавить новый аргумент в вызов init_notebook, когда пользователь может определить, что делать. Я могу себе представить, что многим пользователям mlab будет достаточно чередования фигур (чтобы они могли постепенно строить сцену), но поведение по умолчанию должно состоять в том, чтобы иметь независимые фигуры для каждой ячейки.

Всем привет,

извините, что добавляю некоторые вещи в этот закрытый вопрос, но я подумал, что это будет хорошая возможность оставить отзыв о проекте.
Я только что протестировал интеграцию ноутбука Jupyter с помощью x3d и заставил ее работать после нескольких сбоев.
И я чувствовал то же, что и @thoth291 : я ожидал, что Mayavi неявно создаст новую фигуру для новой ячейки. Думаю, я ожидал этого, потому что это значение по умолчанию для matplotlib, использующее встроенный бэкэнд %matplotlib.
Однако можно привести и противоположный случай: при использовании бэкенда блокнота %matplotlib необходимо явно создавать фигуры (в противном случае действие рисования выполняется с ранее открытой фигурой, что иногда дает неожиданные результаты для пользователя).

Итак, резюмируем: разные бэкэнды matplotlib ведут себя по-разному в отношении создания новых фигур. С точки зрения пользователя было бы проще, если бы цифры были привязаны к ячейкам. Однако, если следовать предложению ноутбука %matplotlib, можно следовать этому рабочему процессу:

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

Это действительно работает, поэтому, возможно, стоит переформатировать пример блокнота таким образом, а также раздел с советами и рекомендациями, в котором описаны блокноты Jupyter (http://docs.enthought.com/mayavi/mayavi/tips. html).

В любом случае, я хотел бы добавить, что я думаю, что это здорово, что этот бэкэнд существует. Спасибо за тяжелую работу @prabhuramachandran @GaelVaroquaux !

С наилучшими пожеланиями,
Флориан

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

Make42 picture Make42  ·  7Комментарии

rambalachandran picture rambalachandran  ·  9Комментарии

dnacombo picture dnacombo  ·  7Комментарии

relyativist picture relyativist  ·  16Комментарии

aestrivex picture aestrivex  ·  9Комментарии