python - bqplot:性能问题

标签 python ipython jupyter-notebook jupyter bqplot

我正在尝试 bqploton_drag 功能。我注意到它有点滞后.. 我不确定这是否是

  • 真正的问题
  • 我做了一些不恰当的事情
  • 按照本来的样子工作

所以我的代码如下

from bqplot import pyplot as plt
import numpy as np
fig=plt.figure()
lin=plt.plot([0,1],
             [0,0])
scatt1=plt.scatter([0],[0],colors=['Red'])
scatt2=plt.scatter([1],[0],enable_move=True)

plt.xlim(-3,3)
plt.ylim(-3,3)
fig.layout.height = '500px'
fig.layout.width = '500px'
plt.show()
def call_back2(name, value):
   #print(value,name)
   if value['point']:
       X=value['point']['x']
       Y=value['point']['y']
       lin.x=[scatt1.x[0],(X-scatt1.x)[0]]
       lin.y=[scatt1.y[0],(Y-scatt1.y)[0]]

scatt2.on_drag_start(call_back2)
scatt2.on_drag(call_back2)
scatt2.on_drag_end(call_back2)

这只是连接的两个点 你可以拖动蓝色的 我注意到这条线稍微落后于蓝点。

最佳答案

您不能直接拖动线上的点。您的方法是我所知道的唯一方法,因此该线将始终跟随散点。我无法让您的代码运行得明显更快。

from bqplot import pyplot as plt
import numpy as np
fig = plt.figure()
lin=plt.plot([0,1],
             [0,0])
scatt1=plt.scatter([0],[0],colors=['Red'])
scatt2=plt.scatter([1],[0],enable_move=True)
# scatt2.update_on_move = True

plt.xlim(-3,3)
plt.ylim(-3,3)
fig.layout.height = '500px'
fig.layout.width = '500px'
plt.show()
def call_back2(name, value):
#     with lin.hold_sync():
   lin.x=[lin.x[0], value['point']['x']]
   lin.y=[lin.y[0], value['point']['y']]    

# scatt2.on_drag_start(call_back2)
scatt2.on_drag(call_back2 )
# scatt2.on_drag_end(call_back2)

编辑:

其实是可以做到的。使用jslink。这些性状必须具有相同的类型和长度/大小。在本例中,线条和散点标记的“x”和“y”特征是长度为 2 的数组。

from bqplot import pyplot as plt
from ipywidgets import jslink

fig = plt.figure()

# Strange bug when 1st point is 0,0. Red point flickers.  
lin=plt.plot([0.0001,1],
             [0.0001,0])   

scatt2=plt.scatter(lin.x, lin.y, enable_move = True, colors = ['Red','blue'])
scatt2.update_on_move = True

# Cover up 1st point so it can't be moved. 
# Just remove this line if you want both points to be moveable
scatt3=plt.scatter([lin.x[0]], [lin.y[0]], colors = ['Red']) 


plt.xlim(-3,3)
plt.ylim(-3,3)
fig.layout.height = '500px'
fig.layout.width = '500px'
plt.show()

jslink((scatt2, 'x'), (lin, 'x'))
jslink((scatt2, 'y'), (lin, 'y'))

Jslink 不需要 Python 内核即可实现交互性。 您可以通过以下方式创建 html 文件(和 js 目录):

import ipyvolume.embed
ipyvolume.embed.embed_html("bqplot.html", fig, offline=True, devmode=False)

关于python - bqplot:性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495049/

相关文章:

python - IPython Notebook 语言环境错误

python - 在 iPython notebook 中调试的正确方法是什么?

python - Python/django 中的 URL 获取 : prevent abuse, mailcious urls 等

python - ruamel.yaml 转储不保留 bool 值大小写

python - 修改 Dijkstra 以进行计数

python - iPython 魔法 %logstart 选项 -o 不工作

python - 字典中的总和值小于某个值

python - 在只读 View (如 HTML 文件)中打开 IPython 笔记本 (*.ipynb)

python - Python 3 中字符串函数的意外输出

python - Keithley 2410 Pymeasure NotImplementedError : Please upgrade PyVISA to version 1. 8 或更高版本