私が直面している問題は、スライダーで値を増減するときに、どのようにフィギュアを更新するのか分かりません。スライダーを均等に配置したメッシュ内の値を更新する
私はx、yメッシュグリッドを作成し、それをプロットして、新しいメッシュを定義するために配列内の値を更新しています。私は、スライダを動かしてより細かい/粗いグリッドを見て、プロットと軸を更新したいと考えています。
さらに、グリッド線をマウスと対話的に移動できるようにしたいと思います。これはサンプルコードには含まれていません。誰かがこれを実装する方法を知っていますか?
スライダー付きプロットの値を更新する際に同様の質問がありましたが、おそらくこの特定の問題に対処できません。誰かが私が間違っていることを理解するのに役立つことができますか?私はプロットを再描画しているものがないことを理解しています(しかし、私は様々なことをテストしましたが).MplotGrid()がグリッドを作成するので、これを実装する方法がわかりません。 fig.canvas.draw_idle()を使用します。私は私がSimPEG
を使用していないとして、対話形式numpy
グリッドを変更する例を与えることができ
#Create simple evenly spaced mesh and allow slider to change values
from SimPEG import Mesh, np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons
hx = np.r_[0.1,0.1,0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
hy = np.r_[0.1,0.1,0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
M = Mesh.TensorMesh([hx, hy])
M.plotGrid()
#Define slider location, size, and color for adjusting mesh values
axhx = plt.axes([0.25, 0.1, 0.65, 0.03])
axhy = plt.axes([0.25, 0.15, 0.65, 0.03])
xnode_inc = Slider(axhx, 'X mesh Node', 0.1, 1000.0, valinit=0)
anode_inc = Slider(axhy, 'Y mesh Node', 0.1, 1000.0, valinit=0)
def update(val):
framehx = xnode_inc.val + hx
framehy = ynode_inc.val + hy
M = Mesh.TensorMesh([framehx, framehy])
print M, framehx, framehy
M.plotGrid()
xnode_inc.on_changed(update)
ynode_inc.on_changed(update)
plt.show()
。設定スライダーのすべての要素がそこにあります(軸、スライダ、更新関数、on_changedイベント、表示)。新しいIpython/Jupyterノートブックでipywidgetsのスライダーを使うのはずっと簡単です。それはOKだろうか?また 'SimPEG'に依存しない、単に' numpy'に依存する例を考え出すことができますか?問題は 'np.around'、btwかもしれません。 'np.around(sx、decimals = 1)'を試してください。 – roadrunner66
'np.around(sx) - > ..(sx.val)'私はだと思います – roadrunner66
これ以上見ると、私の問題はlを何のように定義するのかもしれないと思います。私はsx.valとsy.valをnp.aroundに入れました。あなたがmatplotlib、numpy、scipy、およびcythonを持っていても、SimPEGを追加しないと、pip/gitを使ってSimPEGを追加するのは簡単です。 – user1332577