質問されてからほぼ1年が経ちました。答えは ではありませんmpld3
が、私はその特定の技術に固執しません。ユーザー @Drew が の使用bqplot
を提案したので、関連するノートブックへのリンクを投稿します
https://github.com/bloomberg/bqplot/blob/master/examples/Interactions/Interaction%20Layer.ipynb
からbloomberg
。これを開いた場合は、右上隅にあるリンクを見つけて、写真付きの外部 nbviewer にリダイレクトすることをお勧めします。ほとんどすべてがそこに含まれています。最小限の作業例を再現しようとしています。
jupyter notebook
with extensionbqplot
や someを起動ipywidgets
するには、何らかの「魔法」をかけて動作させる必要がある場合があることに注意してください。jupyter install nbextension
や などのいくつかの bash コマンドに精通している必要がありますjupyter nbextension enable
。bqplot
私は個人的にそれを機能させるために数時間苦労しなければなりませんでした. しかし、これは明らかに別の問題です。
試しに機能を起動してみましょうobserve
。テスト関数my_callback(...)
はイベントを出力するだけです。
%matplotlib inline
from bqplot import pyplot as plt
def my_callback(change):
print change
scatt = plt.scatter([1,2,3],[4,5,6],enable_move=True)
scatt.observe(my_callback)
plt.show()
次のような素敵なプロットが得られます。
ポイントをドラッグする機能が追加されました。ポイントをドラッグすると、python
構造体である変更のリストが出力され、各イベントが別の行に表示されます。
{'owner': , 'new': {u'hovered_point': 1}, 'old': traitlets.Undefined, 'name': '_property_lock', 'type': 'change'}
{'owner': , 'new': 1, 'old': None, 'name': 'hovered_point', 'type': 'change'}
{'owner': , 'new': {}, 'old': {u'hovered_point': 1}, 'name': '_property_lock', 'type': 'change'}
{'owner': , 'new': {u'y': {u'type': u'float', u'values': [4, 4.863453784620906, 6]}, u'x': {u'type ': u'float', u'values': [1, 2.016078455307904, 3]}}, 'old': {}, 'name': '_property_lock', 'type': 'change'}
{'owner': , 'new': array([ 4. , 4.86345378, 6. ]), 'old': array([4, 5, 6]), 'name': 'y', 'type': '変化する'}
{'owner': , 'new': array([ 1. , 2.01607846, 3. ]), 'old': array([1, 2, 3]), 'name': 'x', 'type': '変化する'}
{'owner': , 'new': {}, 'old': {u'y': {u'type': u'float', u'values': [4, 4.863453784620906, 6]}, u' x': {u'type': u'float', u'values': [1, 2.016078455307904, 3]}}, 'name': '_property_lock', 'type': 'change'}
{'owner': , 'new': {u'hovered_point': None}, 'old': {}, 'name': '_property_lock', 'type': 'change'}
{'owner': , 'new': None, 'old': 1, 'name': 'hovered_point', 'type': 'change'}
{'owner': , 'new': {}, 'old': {u'hovered_point': None}, 'name': '_property_lock', 'type': 'change'}
構造を分解するのが少し難しいことは認めますが、注意深く見てみると、太線が に'name'
等しく'_property_lock'
、'new'
サブ構造に フィールドu'x'
andが含まれていることがわかりますu'y'
。これは、"x" と "y" の Unicode です。
次に、これらの変更を追跡し、それに応じpython
て function 内でいくつかのコードを実行my_callback(...)
できます。このプロット内に何かを描画したり、新しいプロットを作成したりすることもできます。驚くべきことに、これは何とか機能し、新しい jupyter を使用すると、ウィジェットでノートブックを保存することもできますこれは完全に驚くべきことです。