Когда я рисую одну сцену за другой в своем блокноте Jupyter с бэкэндом x3d, происходит следующее:
Что мне делать, чтобы предотвратить это? (Я предполагаю, что вы видите сетку из Out[2] в центре сетки в Out[8])
PS Может быть, это важно - я запускаю свой сервер ноутбука jupyter на удаленной машине под VirtualGL.
Вы пытались создать новую фигуру в новой ячейке?
Я сделал это 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 !
С наилучшими пожеланиями,
Флориан
Самый полезный комментарий
Всем привет,
извините, что добавляю некоторые вещи в этот закрытый вопрос, но я подумал, что это будет хорошая возможность оставить отзыв о проекте.
Я только что протестировал интеграцию ноутбука Jupyter с помощью x3d и заставил ее работать после нескольких сбоев.
И я чувствовал то же, что и @thoth291 : я ожидал, что Mayavi неявно создаст новую фигуру для новой ячейки. Думаю, я ожидал этого, потому что это значение по умолчанию для matplotlib, использующее встроенный бэкэнд %matplotlib.
Однако можно привести и противоположный случай: при использовании бэкенда блокнота %matplotlib необходимо явно создавать фигуры (в противном случае действие рисования выполняется с ранее открытой фигурой, что иногда дает неожиданные результаты для пользователя).
Итак, резюмируем: разные бэкэнды matplotlib ведут себя по-разному в отношении создания новых фигур. С точки зрения пользователя было бы проще, если бы цифры были привязаны к ячейкам. Однако, если следовать предложению ноутбука %matplotlib, можно следовать этому рабочему процессу:
Это действительно работает, поэтому, возможно, стоит переформатировать пример блокнота таким образом, а также раздел с советами и рекомендациями, в котором описаны блокноты Jupyter (http://docs.enthought.com/mayavi/mayavi/tips. html).
В любом случае, я хотел бы добавить, что я думаю, что это здорово, что этот бэкэнд существует. Спасибо за тяжелую работу @prabhuramachandran @GaelVaroquaux !
С наилучшими пожеланиями,
Флориан