<p>自从这个问题被提出以来,已经快一年了。好吧,答案不是关于<code>mpld3</code>,但我不坚持那种特定的技术。用户@Drew建议使用<code>bqplot</code>,因此我发布了一个相关笔记本的链接</p>
<p><a href="https://github.com/bloomberg/bqplot/blob/master/examples/Interactions/Interaction%20Layer.ipynb" rel="nofollow noreferrer">https://github.com/bloomberg/bqplot/blob/master/examples/Interactions/Interaction%20Layer.ipynb</a></p>
<p>来自<code>bloomberg</code>。如果您打开这个,我建议您找到右上角的链接,它会将您重定向到带有图片的外部nbviewer。几乎所有的东西都包含在那里,我只是试图重现一个极简的工作示例。在</p>
<p>请注意,为了启动扩展名为<code>bqplot</code>的<code>jupyter notebook</code>,以及一些{<cd6>},您可能需要做一些“魔术”来使其工作。您需要熟悉一些bash命令,如<code>jupyter install nbextension</code>和{<cd8>}。我个人不得不与<code>bqplot</code>斗争几个小时才能使其工作。但这显然是另一个问题。在</p>
<p>让我们尝试启动函数<code>observe</code>。测试函数<code>my_callback(...)</code>只打印事件。在</p>
<pre class="lang-py prettyprint-override"><code>%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()
</code></pre>
<p>你得到了这样一个很好的情节:
<a href="https://i.stack.imgur.com/VtjDy.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/VtjDy.png" alt="Random plot from bqplot"/></a></p>
<p>具有额外的拖动点的能力。一旦您拖动一个点,您将看到一个打印的更改列表,它是一个<code>python</code>结构,每个事件都在一个单独的行上。在</p>
<p><a href="https://i.stack.imgur.com/TKqmh.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/TKqmh.png" alt="enter image description here"/></a></p>
<blockquote>
<p>{'owner': , 'new': {u'hovered_point': 1}, 'old': traitlets.Undefined, 'name': '_property_lock', 'type': 'change'}</p>
<p>{'owner': , 'new': 1, 'old': None, 'name': 'hovered_point', 'type': 'change'}</p>
<p>{'owner': , 'new': {}, 'old': {u'hovered_point': 1}, 'name': '_property_lock', 'type': 'change'}</p>
<p><strong>{'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'}</strong></p>
<p>{'owner': , 'new': array([ 4. , 4.86345378, 6. ]), 'old': array([4, 5, 6]), 'name': 'y', 'type': 'change'}</p>
<p>{'owner': , 'new': array([ 1. , 2.01607846, 3. ]), 'old': array([1, 2, 3]), 'name': 'x', 'type': 'change'}</p>
<p>{'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'}</p>
<p>{'owner': , 'new': {u'hovered_point': None}, 'old': {}, 'name': '_property_lock', 'type': 'change'}</p>
<p>{'owner': , 'new': None, 'old': 1, 'name': 'hovered_point', 'type': 'change'}</p>
<p>{'owner': , 'new': {}, 'old': {u'hovered_point': None}, 'name': '_property_lock', 'type': 'change'}</p>
</blockquote>
<p>我承认这个结构分解起来有点棘手,但是仔细浏览之后,我们注意到粗体行的<code>'name'</code>等于<code>'_property_lock'</code>,然后<code>'new'</code>子结构包含字段<code>u'x'</code>和{<cd17>},这是“x”和“y”的Unicode。在</p>
<p>你甚至可以在里面画一些新的东西,甚至可以用CDM来保存一些新的东西。在</p>