热门标签 | 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]))

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



推荐阅读
  • IneedtofocusTextCellsonebyoneviaabuttonclick.ItriedlistView.ScrollTo.我需要通过点击按钮逐个关注Tex ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • C# WPF 打字射击游戏开发
    介绍了一个基于C#和WPF技术的简单打字射击游戏的实现方法,包括字母的生成、移动、消除以及基本的游戏界面设计。 ... [详细]
  • Flutter入门指南:实现自动关闭的对话框与提示
    本文为Flutter系列教程的一部分,专注于讲解如何在Flutter应用中实现自动关闭的对话框和提示。通过具体的代码示例,帮助开发者掌握SnackBar、BottomSheet和Dialog的使用方法。 ... [详细]
  • 经过一段时间的学习与实践,我已经使用D3.js完成了一些项目。鉴于中文D3教程稀缺,而英文资料虽丰富却对英语水平有一定要求,特此撰写一系列D3实战文章,旨在通过具体案例(如统计数据可视化、地图信息展示等)分享D3的使用技巧,促进技术交流。 ... [详细]
  • KNN算法在海伦约会预测中的应用
    本文介绍如何使用KNN算法进行海伦约会的预测。我们将从数据导入、数据预处理、数据可视化到最终的模型训练和测试进行全面解析。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • 面临考试压力,急需解决四个编程问题,包括实现乒乓球的动态效果、计算特定日期是一年的第几天、逆序输出数字以及创建弹出菜单。每个问题的解决都能在TC3.0环境中获得50分。 ... [详细]
  • 本文探讨了在Android应用程序开发过程中动态管理Fragment的方法,包括动态添加和切换Fragment,以及如何实现平滑的过渡动画。文章通过一个具体的案例——订单管理系统,详细介绍了实现步骤和技术细节。 ... [详细]
  • ECharts图表绘制函数集
    本文档提供了使用ECharts库创建柱状图、饼图和双折线图的JavaScript函数。每个函数都详细列出了参数说明,并通过示例展示了如何调用这些函数以生成不同类型的图表。 ... [详细]
  • 基于Flutter实现风车加载组件的制作_Android
    Flutter官方提供了诸如 CircularProgressIndicator和 LinearProgressIndicator两种常见的加载指示组件,但是说实话,实在太普通,所 ... [详细]
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社区 版权所有