Mayavi: mlab.axes()は、Mayavi4.5.0で例外を引き起こします

作成日 2017年01月06日  ·  9コメント  ·  ソース: enthought/mayavi

こんにちは、最近、Mayaviを4.4.4から4.5.0に更新しました。 更新後、 mlab関数axes()を使用すると、例外が発生します。 テストコードは次のとおりです(エラーの原因となっている行はコメントで示されています)。

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()

上記のコードをWindowsおよびanaconda環境で実行すると、次のエラーメッセージが表示されます。

ポップアップメッセージ(ボックス):

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)

コンソールウィンドウのメッセージ:

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'

追加情報

上記の例外が発生する環境
OS:Windows 10
Pythonのインストール:Anacondaを使用してインストールされたPython 2.7
マヤビパッケージ:マヤビ4.5.0py27_0面頬
VTKパッケージ:vtk 7.0.0 py27_0 menpo
PyQtパッケージ:pyqt 5.6.0 py27_1

上記のコードが正常に実行される環境
OS:Windows 7
Pythonのインストール:Anacondaを使用してインストールされたPython 2.7
マヤビパッケージ:マヤビ4.4.4py27_0面頬
VTKパッケージ:vtk 7.0.0 py27_0 menpo
PyQtパッケージ:pyqt 4.11.4 py27_5

最も参考になるコメント

それでも興味がある場合は、Jeitanと同様の構成で、同じエラーが発生し、update_pipelineでmayavi \ modules \ axes.pyを編集して、次のように変更して静めました。
self.configure_input_data(self.axes、src.outputs [0])
に:
self.configure_input_data(self.axes、src.outputs [0] .output)

(前者はタイプPolyDataNormals、後者はDataSetから派生したPolyDataです。)

全てのコメント9件

価値があるので、私は次の条件下でこのエラーを複製しました:

OS:Windows 10
Pythonのインストール:Anacondaを使用してインストールされたPython 2.7
マヤビパッケージ:マヤビ4.5.0 py27_0
VTKパッケージ:vtk 6.3.0 py27_1
PyQtパッケージ:pyqt 4.11.4 py27_4

conda install mayavi=4.4を使用してダウングレードした場合*コードは機能します
マヤビ-> 4.4.0
VTK-> 5.10.1

*無関係な注意-これはnumpyを1.10から1.9.3にダウングレードし、Spyderを壊すため、手動で再アップグレードする必要があります

私はここでも同じ問題を抱えています。 誰も手がかりを持っていませんか?

それでも興味がある場合は、Jeitanと同様の構成で、同じエラーが発生し、update_pipelineでmayavi \ modules \ axes.pyを編集して、次のように変更して静めました。
self.configure_input_data(self.axes、src.outputs [0])
に:
self.configure_input_data(self.axes、src.outputs [0] .output)

(前者はタイプPolyDataNormals、後者はDataSetから派生したPolyDataです。)

私もこの問題に遭遇しました。

@jdoneganあなたの提案は私の問題を修正しました:+1

私もこの問題を抱えていて、 うまくいきました。 PRを送信する予定でしたが、 @ prabhuramachandranは、問題の行を次のように置き換えることで、これを修正するコミットをすでにプッシュしているようです。
self.configure_input(self.axes、src.outputs [0])

混乱を防ぐために、おそらくこの問題を解決する必要がありますか?

同様に、decorations.pyの373行目に同じ問題と同様の修正を適用する必要があります。
axis.axes.ranges = \
axis.module_manager.source.outputs [0] .output.bounds

エラーを解決する
"AttributeError: 'PolyDataNormals'オブジェクトに属性 'bounds'がありません"

したがって、コミット996fb25は問題の一部のみを修正したと思います。

@TinghuiWangが指摘したように、これは複数の場所で修正する必要があります。 ただし、プロットの呼び出しによっては(私にとっては、plot3dとpoints3dでした)、元に戻す必要がある場合があります。 私はそれを次のように修正しました:

173行目のmayavi\modules\axes.pyで、変更しました

self.configure_input_data(self.axes, src.outputs[0])

data = src.outputs[0] if not hasattr(src.outputs[0], 'output') else src.outputs[0].output
self.configure_input_data(self.axes, data)

同様に、372行目の\mayavi\tools\decorations.pyで私はカンジしました

axes.axes.ranges = axes.module_manager.source.outputs[0].bounds

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

みんな直してください。 軸は本当に必要です。

上記の方法に従いますが、問題の一部のみを解決しましたが、まだ例外があります。
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

画像に軸ラベルはありません。

誰でも助けることができますか? ありがとう!

このページは役に立ちましたか?
0 / 5 - 0 評価