首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bqplot:性能问题

bqplot:性能问题
EN

Stack Overflow用户
提问于 2017-09-29 18:35:31
回答 1查看 538关注 0票数 1

我在玩bqploton_drag特性。我注意到它有点滞后。我不确定这是不是

  • 真实问题
  • 我做了一些不适当的事
  • 注定要像现在这样工作

因此,我的代码如下

代码语言:javascript
复制
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)

它只是两个点相连,你可以拖动蓝色的一个,我注意到,这条线总是比蓝点稍微落后。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-14 14:31:46

你不能直接在一条线上拖动一个点。据我所知,你的方法是唯一的方法,所以这条线总是沿着散射点走。我无法让你的代码运行得更快。

代码语言:javascript
复制
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的数组。

代码语言:javascript
复制
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目录):

代码语言:javascript
复制
import ipyvolume.embed
ipyvolume.embed.embed_html("bqplot.html", fig, offline=True, devmode=False)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46495049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档