TapTool同时“点击”多个字形(许多字形靠在一起)

时间:2019-04-02 18:14:56

标签: python bokeh

我已经成功创建了条形图。但是,由于彼此之间有太多字形,每当“点击”发送到TapTool时,多个字形便会触发其点击工具,因此在新标签页中会打开多个图像,而不仅仅是一个“最接近”字形。点击的字形。

如您在屏幕快照中所见,在默认视图下,有许多字形重叠,如果我简单地单击鼠标,很可能会击中多个字形,这就是为什么点击工具会多次触发的原因(每个字形命中一次)。放大后,很明显,它不是散点图,而是散布图,看起来像条形图,每个字形代表不同的图像。

如何仅强制“最接近”的字形(或仅从Taptool击中的字形列表中获取第一个字形)来触发其Taptool?

zoomed_out

zoomed_in

在线上没有太多文档介绍如何执行此操作。

imgs = ['http://1...', 'http://2...', 'http://3...']
url = "@imgs"
click_tool = TapTool(callback=OpenURL(url=url))
p.add_tools(click_tool)

1 个答案:

答案 0 :(得分:0)

在鼠标光标下每个像素挤压的字形太多了,因此它们都将对您的鼠标单击做出响应。一个好的解决方案是在图形的y范围上附加一个回调函数,该函数将以较少的字形重新绘制图表。因此,当您放大外部字形时,该字形将从绘图中消失,并将添加以前不可见的新字形。在某些缩放级别,您将不再需要过滤字形,并且它们都将适合。我的意思是这样的:

plot.y_range.callback = CustomJS(args=dict(source=source), code=code)

绘图画布具有固定的像素高度,因此在回调中,您无需在绘图中放置该字形数量(字形=画布像素高度),这意味着每个像素高度一个水平条。然后只需单击一次,只需选择一个字形。