热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发技巧分享:利用套索与矩形选择工具高效选取绘图中的全部字形节点

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何使用套索或盒子工具选择绘图中所有字形的所有点?相关的知识,希望对你有一定的参考价值。 我有一个带有几个字形的图(figure)(由plot.cir

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何使用套索或盒子工具选择绘图中所有字形的所有点?相关的知识,希望对你有一定的参考价值。



我有一个带有几个字形的图(figure)(由plot.circle绘制)我想同时选择所有图层。我已经为每个circle应用了CDSFilter。我也使用legend隐藏或显示它们。我想要做的是只选择可见的字形点。

# [...]
plot = figure(
X',
y_axis_label='Y',
tools='', # they are added later
)
for key in flags:
view = CDSView(source=self.source, filters=[IndexFilter(flags[key])])
g = plot.circle(
x='X', y='Y',
size=5,
fill_color=colors[key],
legend='FLAG {}'.format(key),
line_color=None,
selection_color='red',
source=self.source,
view=view,
)
g.nonselection_glyph = None # avoids to alter the color of the nonselected points
plot.legend.location = "top_left"
plot.legend.click_policy = "hide"
# [...]
lasso_select = LassoSelectTool(
# renderers=self.glyph_rends, # default >> all renderers inside the plot, this is not working either
select_every_mousemove=False,
)
tools = (
wheel_zoom, pan, box_zoom, box_select, lasso_select,
crosshair, tap, save, reset, hover
)
plot.add_tools(*tools)

enter image description here

正如您在图像中看到的那样,只选择绿点,不选择蓝点。当前选择用红色绘制。如果我用图例上的按钮隐藏绿点,那么我可以选择蓝色点。如果我使用Tap工具,那么它按预期工作,即使我使用Lasso Tool只选择一个点。


更新

我发布了an issue on the Git Hub Project


答案

解决了问题

好吧,似乎这个问题已经在主分支中解决了。所以我正在使用从主人构建的版本0.12.14+25.g675aacf72进行测试,它运行良好。版本0.12.15dev1也被发布了,我相信这个版本也已修复。


以前的方案

在主分支上解决此问题之前,我找到了一个解决方法。我创建了一个新的圆形标志符号,将整个ColumnDataSource绘制在其余字形的顶部

from bokeh.models import Button, ColumnDataSource, Circle, CDSView, IndexFilter
from bokeh.models.tools import LassoSelectTool
from bokeh.models.glyphs import MultiLine, Line
from bokeh.palettes import Reds3
from bokeh.layouts import column
from bokeh.plotting import curdoc, figure
import numpy as np
plot_1 = figure(
pan,box_zoom,box_select,wheel_zoom,tap,save,reset,crosshair",
)
x = list(range(0,200))
y = np.random.random_integers(200, size=(200))
source = ColumnDataSource(data=dict(x=x, y=y))
selection = list(np.random.random_integers(100, size=(20)))
view = CDSView(
source=source,
filters=[IndexFilter(x[100:])]
)
circle = plot_1.circle(
x='x',
y='y',
size=5,
fill_alpha=1,
fill_color='orange',
line_color=None,
selection_color=Reds3[0],
source=source,
view=view,
legend='FLAG 1',
)
circle.selection_glyph = Circle(
fill_alpha=1.0, # transparent
line_color=None,
fill_color='orange',
)
circle.nonselection_glyph = Circle(
fill_alpha=1.0,
line_color=None,
fill_color='orange',
)
view = CDSView(
source=source,
filters=[IndexFilter(
x[:100]
)]
)
circle_2 = plot_1.circle(
x='x',
y='y',
size=5,
fill_alpha=1,
fill_color='blue',
line_color=None,
selection_color=Reds3[0],
source=source,
view=view,
legend='FLAG 2',
)
circle_2.selection_glyph = Circle(
fill_alpha=1.0, # transparente
line_color=None,
fill_color='blue',
)
circle_2.nonselection_glyph = Circle(
fill_alpha=1.0,
line_color=None,
fill_color='blue',
)
plot_1.legend.location = "top_left"
plot_1.legend.click_policy="hide"
circle_all = plot_1.circle(
x='x',
y='y',
size=5,
fill_alpha=0.0, # transparent
line_color=None,
source=source,
)
circle_all.selection_glyph = Circle(
fill_color=Reds3[0],
fill_alpha=1.0, # transparent
line_color=None,
)
circle_all.nonselection_glyph = Circle(
fill_alpha=0.0, # transparent
line_color=None,
line_alpha=0.0,
)
lasso = LassoSelectTool(
renderers=[circle_all],
select_every_mousemove=False,
)
plot_1.add_tools(lasso)
def update_selection(attr, old, new):
print('>> NEW: {}'.format(new['1d']['indices']))
source.on_change( # source should be shared along all the plots
'selected',
update_selection
)
curdoc().add_root(column([plot_1]))

无论如何,这只是一个临时的解决方法。



推荐阅读
  • 使用Powershell Studio快速构建GUI应用程序
    本文介绍了如何利用Powershell Studio创建功能强大的可视化界面。相较于传统的开发工具,Powershell Studio提供了更为简便和高效的开发体验,尤其适合需要快速构建图形用户界面(GUI)的场景。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • 开发笔记:精通 CSS 第 10 章 变换过渡与动画 学习笔记
    开发笔记:精通 CSS 第 10 章 变换过渡与动画 学习笔记 ... [详细]
  • 使用Bootstrap创建响应式渐变固定头部导航栏的方法
    本文详细介绍了如何利用Bootstrap框架构建一个具有渐变效果的固定顶部响应式导航栏,包括HTML结构、CSS样式以及JavaScript交互的完整实现过程。适合前端开发者和学习者参考。 ... [详细]
  • 博主从零开始学习HTML(入门基础)
    从零开始学习HTML(入门基础)互联网三大基石HTTP协议URL:统一资源定位符HTML:超文本标记语言HTML的Head标签中的常用元素<!--告知 ... [详细]
  • 深入探讨jQuery中的事件处理、动画效果及表单操作
    本文详细介绍了jQuery这一流行的JavaScript库在事件处理、动画效果实现以及表单操作方面的应用。通过具体的示例和代码片段,帮助开发者更好地理解和运用jQuery的强大功能。 ... [详细]
  • 开发笔记:2020 BJDCTF Re encode
    开发笔记:2020 BJDCTF Re encode ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 解析SQL查询结果的排序问题及其解决方案
    本文探讨了为什么某些SQL查询返回的数据集未能按预期顺序排列,并提供了详细的解决方案,帮助开发者理解并解决这一常见问题。 ... [详细]
  • 本文详细介绍了 iBatis.NET 中的 Iterate 元素,它用于遍历集合并重复生成每个项目的主体内容。通过该元素,可以实现类似于 foreach 的功能,尽管 iBatis.NET 并未直接提供 foreach 标签。 ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
author-avatar
once
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有