Hai, baru-baru ini, saya memperbarui Mayavi dari 4.4.4 menjadi 4.5.0. Setelah pembaruan, saya mengamati pengecualian ketika saya menggunakan fungsi mlab
axes()
. Berikut adalah kode pengujian (garis yang menyebabkan kesalahan ditunjukkan oleh komentar):
from mayavi import mlab
from numpy import pi, sin, cos, mgrid
dphi, dtheta = pi/250.0, pi/250.0
[phi,theta] = mgrid[0:pi+dphi*1.5:dphi,0:2*pi+dtheta*1.5:dtheta]
m0 = 4; m1 = 3; m2 = 2; m3 = 3; m4 = 6; m5 = 2; m6 = 6; m7 = 4;
r = sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7
x = r*sin(phi)*cos(theta)
y = r*cos(phi)
z = r*sin(phi)*sin(theta)
s = mlab.mesh(x, y, z)
mlab.axes(color=(0.9,0.9,0.9)) # LINE CAUSING ERROR
mlab.show()
Ketika menjalankan kode di atas di lingkungan Windows dan anaconda, saya melihat pesan kesalahan berikut:
Pesan pop-up (kotak):
Exception
In c:\anaconda\lib\site-packages\mayavi-4.5.0-py2.7-win-amd64.egg\tvtk\tvtk_base.py:569
TypeError: SetInputData argument 1:method requires a vtkDataSet, a vtkPolyDataNormals was provided. (in _wrap_call)
Pesan di jendela konsol:
No handlers could be found for logger "mayavi.core.common"
Exception occurred in traits notification handler.
Please check the log file for details.
Exception occurred in traits notification handler for object: <mayavi.tools.decorations.Axes object at 0x0000000011AC00A0>, trait: extent, old value: [0 0 0 0 0 0], new value: [-1.53801118 1.53801118 -2. 2.27326963 -1.53801118 1.53801118]
Traceback (most recent call last):
File "C:\Anaconda\lib\site-packages\traits\trait_notifiers.py", line 340, in __call__
self.handler( *args )
File "C:\Anaconda\lib\site-packages\mayavi-4.5.0-py2.7-win-amd64.egg\mayavi\tools\decorations.py", line 373, in _extent_changed
axes.module_manager.source.outputs[0].bounds
AttributeError: 'PolyDataNormals' object has no attribute 'bounds'
Informasi tambahan
Lingkungan di mana pengecualian di atas terjadi
OS: Windows 10
Instalasi Python: Python 2.7 diinstal menggunakan Anaconda
Paket Mayavi: mayavi 4.5.0 py27_0 menpo
Paket VTK: vtk 7.0.0 py27_0 menpo
Paket PyQt: pyqt 5.6.0 py27_1
Lingkungan di mana kode di atas berjalan OK
OS: Windows 7
Instalasi Python: Python 2.7 diinstal menggunakan Anaconda
Paket Mayavi: mayavi 4.4.4 py27_0 menpo
Paket VTK: vtk 7.0.0 py27_0 menpo
Paket PyQt: pyqt 4.11.4 py27_5
Untuk apa nilainya, saya baru saja menggandakan kesalahan ini dalam kondisi berikut:
OS: Windows 10
Instalasi Python: Python 2.7 diinstal menggunakan Anaconda
Paket Mayavi: mayavi 4.5.0 py27_0
Paket VTK: vtk 6.3.0 py27_1
Paket PyQt: pyqt 4.11.4 py27_4
Jika saya menurunkan versi menggunakan conda install mayavi=4.4
* kodenya berfungsi
Mayavi -> 4.4.0
VTK -> 5.10.1
*Catatan yang tidak terkait - ini menurunkan versi numpy dari 1.10 ke 1.9.3 yang merusak Spyder, jadi Anda harus memutakhirkannya secara manual
Saya memiliki masalah yang sama di sini. Tidak ada yang punya petunjuk?
Jika masih menarik, dengan konfigurasi yang mirip dengan Jeitan, saya baru saja mengalami kesalahan yang sama dan menenangkannya dengan mengedit mayavi\modules\axes.py, di update_pipeline, mengubah:
self.configure_input_data(self.axes, src.outputs[0])
ke:
self.configure_input_data(self.axes, src.outputs[0].output)
(Yang pertama adalah tipe PolyDataNormals, yang terakhir adalah PolyData, yang diturunkan dari DataSet.)
Saya juga mengalami masalah.
@jdonegan Saran Anda memperbaiki masalah saya:+1: . Saya rasa Anda harus memposting perbaikan sehingga tidak harus dilakukan secara manual
Saya juga mengalami masalah ini dan perbaikan dari @jdonegan bekerja dengan baik. Akan mengirimkan PR tetapi sepertinya @prabhuramachandran telah mendorong komit yang memperbaikinya, dengan mengganti baris yang dimaksud dengan:
self.configure_input(self.axes, src.outputs[0])
Mungkin masalah ini harus ditutup untuk mencegah kebingungan?
Demikian pula, masalah yang sama dan perbaikan serupa harus diterapkan ke baris 373 di decorations.py:
axes.axes.ranges = \
axes.module_manager.source.outputs[0].output.bounds
untuk memecahkan kesalahan
"AttributeError: objek 'PolyDataNormals' tidak memiliki atribut 'batas'"
Jadi saya percaya komit 996fb25 hanya memperbaiki sebagian dari masalah.
Seperti yang dicatat oleh @TinghuiWang , ini perlu diperbaiki di banyak tempat. Namun, tergantung pada panggilan plot Anda (bagi saya itu plot3d vs points3d), Anda mungkin perlu mengubahnya kembali. Saya memperbaikinya sebagai berikut:
Di mayavi\modules\axes.py
pada baris 173, saya berubah
self.configure_input_data(self.axes, src.outputs[0])
ke
data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
self.configure_input_data(self.axes, data)
Demikian pula di \mayavi\tools\decorations.py
pada baris 372 saya canged
axes.axes.ranges = axes.module_manager.source.outputs[0].bounds
ke
src = axes.module_manager.source
data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
axes.axes.ranges = data.bounds
Tolong diperbaiki ya teman-teman. Kapak sangat dibutuhkan.
Mengikuti metode di atas, saya hanya menyelesaikan sebagian masalah, saya masih memiliki pengecualian:
Exception occurred in traits notification handler for object: <mayavi.tools.decorations.Axes object at 0x11a41ce60>, trait: extent, old value: [0 0 0 0 0 0], new value: [ -2. 17. -2. 17. -4.85316642
6.54683358]
NoneType: None
dan tidak ada label sumbu pada gambar.
Ada yang bisa bantu? Terima kasih!
Komentar yang paling membantu
Jika masih menarik, dengan konfigurasi yang mirip dengan Jeitan, saya baru saja mengalami kesalahan yang sama dan menenangkannya dengan mengedit mayavi\modules\axes.py, di update_pipeline, mengubah:
self.configure_input_data(self.axes, src.outputs[0])
ke:
self.configure_input_data(self.axes, src.outputs[0].output)
(Yang pertama adalah tipe PolyDataNormals, yang terakhir adalah PolyData, yang diturunkan dari DataSet.)