首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bqplot图像的on_click/hover事件

bqplot图像的on_click/hover事件
EN

Stack Overflow用户
提问于 2021-03-08 23:12:50
回答 1查看 148关注 0票数 0

我正在尝试使用ipywidgets和bqplot构建一个带有图像芯片和散点图的交互式仪表板。散点图中的每个点对应一个图像芯片,因此我希望(1)当鼠标悬停在相应图像上时‘突出显示’该点,(2)当在图像中单击时更改该点的颜色并存储x值。

尽管存在用于图像标记的on_clickon_hover,但我没有设法使它们工作。请看下面我到目前为止所做的

代码语言:javascript
运行
复制
import io
import datetime

import numpy as np
import ipywidgets as ipw
from PIL import Image as PImage
import bqplot as bqp
import pandas as pd

#########
## Generate list of random images, with associated x and y values
#########
def random_image():
    """Generate a random ipywidget Image
    """
    arr = np.random.randint(255, size=(300, 300, 3), dtype=np.uint8)
    img = PImage.fromarray(arr)
    with io.BytesIO() as fileobj:
        img.save(fileobj, 'PNG')
        img_b = fileobj.getvalue()
    img_w = ipw.Image(value=img_b)
    return img_w


origin = datetime.datetime(2020, 1, 1)
img_list = [{'image': random_image(),
             'x': origin + datetime.timedelta(idx),
             'y': np.sin(idx)} for idx in range(10)]

###########
## Create scatter plot
###########
scale_y = bqp.LinearScale()
scale_x = bqp.DateScale()
scatter = bqp.Scatter(x=pd.Series([item['x'] for item in img_list]),
                      y=[item['y'] for item in img_list],
                      scales={'x': scale_x, 'y': scale_y})
axis_x = bqp.Axis(scale=scale_x)
axis_y = bqp.Axis(scale=scale_y, orientation='vertical')

scat_fig = bqp.Figure(marks=[scatter],
                      layout={'width':'1500px', 'height':'300px'},
                      axes=[axis_x, axis_y])


#########
## Create grid (or row) of image chips
#########
layout = ipw.Layout(width='150px', height='200px')
img_fig_list = []
for item in img_list:
    image = bqp.Image(image=item['image'])
    fig = bqp.Figure(
#         title=item['x'].strftime('%Y-%m-%d'),
        marks=[image], padding_x=0, padding_y=0, min_aspect_ratio=1, max_aspect_ratio=1,
        fig_margin = dict(top=10, bottom=10, left=10, right=10),
        layout=layout)
    #image.on_click(click_fn)
    img_fig_list.append(fig)

############
## Combine scatter and image chips and display them
############
img_row = ipw.HBox(img_fig_list)
ipw.VBox([scat_fig, img_row])

附加问题:是否可以在同一图形中并排放置多个图像?

EN

回答 1

Stack Overflow用户

发布于 2021-04-25 21:04:43

on_hover()会起作用,只需定义一个回调函数,这样当你悬停时就会调用它。尝试使用on_element_click()代替on_click()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66532295

复制
相关文章

相似问题

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