2016-04-22 9 views
1

私が直面している問題は、スライダーで値を増減するときに、どのようにフィギュアを更新するのか分かりません。スライダーを均等に配置したメッシュ内の値を更新する

私は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() 
+0

。設定スライダーのすべての要素がそこにあります(軸、スライダ、更新関数、on_changedイベント、表示)。新しいIpython/Jupyterノートブックでipywidgetsのスライダーを使うのはずっと簡単です。それはOKだろうか?また 'SimPEG'に依存しない、単に' numpy'に依存する例を考え出すことができますか?問題は 'np.around'、btwかもしれません。 'np.around(sx、decimals = 1)'を試してください。 – roadrunner66

+0

'np.around(sx) - > ..(sx.val)'私はだと思います – roadrunner66

+0

これ以上見ると、私の問題はlを何のように定義するのかもしれないと思います。私はsx.valとsy.valをnp.aroundに入れました。あなたがmatplotlib、numpy、scipy、およびcythonを持っていても、SimPEGを追加しないと、pip/gitを使ってSimPEGを追加するのは簡単です。 – user1332577

答えて

1

は、ここに私のコードです。この例は、Ipython/Jupyterノートブックにあります。これは、インタラクティブなスライダ、プルダウン、ラジオボタンなどを生成するための最も簡単な方法です。つまり、オリジナルのマットプロットスライダと同様の設定を複雑にセットアップすることよりもはるかに改善されています。私はカラーマップのためのコンボボックスを投げただけで簡単にできました。私はコード内の問題を参照することはできません

import numpy as np 
import matplotlib.pyplot as p 
from ipywidgets import * 
%matplotlib inline 


def gridandplot(dx,mp): 
    x=np.arange(0,5,dx) 
    y=np.arange(0,5,dx) 
    x,y=np.meshgrid(x,y) 
    z= np.sin(x)* np.cos(y) 
    if mp=='gray': 
     cmap=p.cm.gray 
    else: 
     cmap= p.cm.jet 
    p.imshow(z,interpolation='none',cmap=cmap) 

interact(gridandplot, dx=(0.005,0.2,0.001), mp= ('gray','jet')) 

enter image description here

enter image description here

+1

私はipywidgets/jupyterを使う方が簡単なのであれば興味があります。 traitlets.traitlets.TraitError:Commインスタンスの 'カーネル'特性はカーネルでなければならないが、タイプ 'NoneType'(つまりNone)の値が指定されています。どのような問題が発生する可能性がありますか? – user1332577

+0

それを見たことがありません。だから、あなたは 'ipython notebook'または 'jupyter notebook'を使ってノートブックを起動すると、あなたはウェブページを手に入れますか?どの時点でエラーが発生しますか?インポートnumpyステートメントは機能しますか? – roadrunner66

+0

端末にjupiterノートを入力すると、私はウェブページを取得します。私はスクリプトをプルアップすることができますが、ノートブックから実行する方法はわかりません。ターミナルでpython script.pyと入力すると、カーネルエラーが発生します。 – user1332577

関連する問題