Mayavi: adegan di notebook Jupyter disisipkan

Dibuat pada 26 Okt 2016  ·  10Komentar  ·  Sumber: enthought/mayavi

Ketika saya memplot satu demi satu adegan di notebook jupyter saya dengan backend x3d - ini terjadi:
screen shot 2016-10-26 at 14 29 14

Apa yang harus saya lakukan untuk mencegah hal ini? (Saya berasumsi bahwa Anda melihat mesh dari Out[2] di tengah mesh di Out[8])

PS Mungkin itu penting - Saya menjalankan server notebook jupyter saya di mesin jarak jauh di bawah VirtualGL.

Komentar yang paling membantu

Halo semua,

maaf karena menambahkan beberapa hal ke masalah tertutup ini, tetapi saya pikir ini akan menjadi kesempatan yang baik untuk memberikan umpan balik ke proyek.
Saya baru saja menguji integrasi notebook jupyter menggunakan x3d dan membuatnya berfungsi setelah beberapa kali tersendat.
Dan saya merasakan hal yang sama dari @thoth291 : Saya berharap mayavi membuat figur baru untuk sel baru secara implisit. Saya kira saya mengharapkan ini karena ini adalah default untuk matplotlib menggunakan %matplotlib backend inline.
Namun, Anda juga dapat memperdebatkan kasus sebaliknya: saat menggunakan %matplotlib notebook backend, kita harus membuat gambar secara eksplisit (jika tidak, tindakan menggambar dilakukan dengan gambar yang dibuka sebelumnya, yang terkadang memberikan hasil yang mengejutkan bagi pengguna).

Jadi untuk rekap: backend matplotlib yang berbeda berperilaku berbeda sehubungan dengan pembuatan gambar baru. Dari sudut pandang pengguna, akan lebih mudah jika angka diikat ke sel. Namun, jika seseorang mengikuti saran notebook %matplotlib, seseorang dapat mengikuti alur kerja ini:

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

Ini benar-benar berfungsi, jadi mungkin sesuatu yang bermanfaat adalah memformat ulang contoh notebook dengan cara kerja ini, serta bagian tip dan trik yang mendokumentasikan notebook jupyter (http://docs.enthought.com/mayavi/mayavi/tips. html).

Bagaimanapun, saya ingin menambahkan bahwa saya pikir itu bagus bahwa backend ini ada. Terima kasih atas kerja kerasnya @prabhuramachandran @GaelVaroquaux !

Salam,
Florian

Semua 10 komentar

sudahkah Anda mencoba membuat gambar baru di sel baru?

Saya melakukan ini mlab.clf() di antaranya dan itu membantu - tidak ada lagi interleaving.
Terima kasih @GaelVaroquaux !

Apakah itu bug atau fitur? Jadi haruskah saya menghapus angka di semua skrip saya sekarang?

@thoth291 -- Ini sama dengan apa yang akan Anda lihat tanpa buku catatan. mlab tidak akan menghapus layar secara otomatis dan Anda harus melakukannya sendiri. BTW, saya ingin tahu tentang pengaturan Anda dengan VirtualGL. Perangkat keras apa yang Anda gunakan dan bagaimana Anda mengatur VirtualGL pada mesin jarak jauh? Ini akan berguna bagi orang lain juga dan mungkin kami dapat menambahkan ini ke dokumentasi kami jika Anda dapat membagikan detailnya.

Saya menutup masalah ini untuk saat ini karena ini bukan masalah tetapi cara kerja mlab.

Sayangnya bukan saya yang mengatur.
Yang bisa saya katakan adalah bahwa kami menggunakan mesin Intel HPC dengan 60 core, banyak RAM, dan GPU yang bagus. Kami memiliki beberapa server vnc yang berjalan di sana. Kami menggunakan tigervnc dan ketika kami memulai server, kami mengaturnya dengan backend VirtualGL. Saat Anda berada di klien vnc - Anda perlu menggunakan skrip khusus untuk menjalankan aplikasi Anda guna mencegat OpenGL dan menggantinya dengan VirtualGL. Dalam kasus saya, skrip itu bernama vnc3d dan saya menjalankannya seperti ini:

vnc3d jupyter notebook

Pengaturan ini bekerja dengan sempurna untuk kami dan satu-satunya hal yang mengganggu adalah Anda harus tetap ingat untuk menambahkan skrip vnc3d ini ke perintah Anda setiap kali Anda berurusan dengan OpenGL...

@prabhuramachandran , saya pikir ini kontra intuitif untuk pengguna Jupyter. Atau setidaknya harus didokumentasikan secara eksplisit bahwa seseorang perlu melakukannya ( mlab.clf() ) untuk memastikan rendering yang benar. Tidak ada mesin 3D (untuk Jupyter) yang saya ketahui memiliki masalah seperti ini.

@prabhuramachandran , saya pikir ini kontra intuitif untuk pengguna Jupyter.

Saya memiliki perasaan yang sama.

@thoth291 -- terima kasih atas informasi tentang penyiapan VirtualGL. Itu terlihat sangat menarik dan bermanfaat. Mengenai mlab.clf() , saya senang untuk mendokumentasikan ini meskipun saya tidak yakin ini adalah perilaku yang membingungkan. Ini sangat mirip dengan menggunakan perintah mlab dan kemudian menggunakan mlab.savefig . Anda akan memiliki efek yang sama. Mungkin yang membingungkan adalah bahwa ini tidak lazim dari perspektif penggunaan notebook di mana pengguna melakukan plt.plot() dalam satu sel dan tidak perlu clf() sebelum sel berikutnya. Apa yang dapat saya lakukan adalah memanggil mlab.clf() secara otomatis setelah adegan diubah menjadi sel keluaran PNG atau X3D? Apakah itu membantu?

Ya, itu bagian yang membingungkan. Mungkin layak untuk mengajukan argumen baru ke panggilan init_notebook ketika pengguna dapat menentukan apa yang harus dilakukan. Saya dapat membayangkan bahwa banyak pengguna mlab akan baik-baik saja memiliki angka yang disisipkan (sehingga mereka dapat secara bertahap membangun sebuah adegan) - tetapi perilaku default harus memiliki angka independen untuk setiap sel.

Halo semua,

maaf karena menambahkan beberapa hal ke masalah tertutup ini, tetapi saya pikir ini akan menjadi kesempatan yang baik untuk memberikan umpan balik ke proyek.
Saya baru saja menguji integrasi notebook jupyter menggunakan x3d dan membuatnya berfungsi setelah beberapa kali tersendat.
Dan saya merasakan hal yang sama dari @thoth291 : Saya berharap mayavi membuat figur baru untuk sel baru secara implisit. Saya kira saya mengharapkan ini karena ini adalah default untuk matplotlib menggunakan %matplotlib backend inline.
Namun, Anda juga dapat memperdebatkan kasus sebaliknya: saat menggunakan %matplotlib notebook backend, kita harus membuat gambar secara eksplisit (jika tidak, tindakan menggambar dilakukan dengan gambar yang dibuka sebelumnya, yang terkadang memberikan hasil yang mengejutkan bagi pengguna).

Jadi untuk rekap: backend matplotlib yang berbeda berperilaku berbeda sehubungan dengan pembuatan gambar baru. Dari sudut pandang pengguna, akan lebih mudah jika angka diikat ke sel. Namun, jika seseorang mengikuti saran notebook %matplotlib, seseorang dapat mengikuti alur kerja ini:

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

Ini benar-benar berfungsi, jadi mungkin sesuatu yang bermanfaat adalah memformat ulang contoh notebook dengan cara kerja ini, serta bagian tip dan trik yang mendokumentasikan notebook jupyter (http://docs.enthought.com/mayavi/mayavi/tips. html).

Bagaimanapun, saya ingin menambahkan bahwa saya pikir itu bagus bahwa backend ini ada. Terima kasih atas kerja kerasnya @prabhuramachandran @GaelVaroquaux !

Salam,
Florian

Apakah halaman ini membantu?
0 / 5 - 0 peringkat