多个挑选事件干扰

2024-04-25

我有几个数据系列分散在一个图中,并且希望能够为它们切换注释。问题是,有时会触发两个拾取事件(当用户单击注释和点内的点时)。 “注释”拾取事件会清除注释,但“点”拾取事件会将其放回原处,因此效果是切换不起作用。

df = pd.DataFrame({'a': np.random.rand(25)*1000,
                   'b': np.random.rand(25)*1000,
                   'c': np.random.rand(25)})

def handlepick(event):
    artist = event.artist
    if isinstance(artist, matplotlib.text.Annotation):
        artist.set_visible(not artist.get_visible())
    else:
        x = event.mouseevent.xdata
        y = event.mouseevent.ydata
        if artist.get_label() == 'a':
            ann = matplotlib.text.Annotation('blue', xy=(x,y), picker=5)
        else: # label == 'b'
            ann = matplotlib.text.Annotation('red', xy=(x,y), picker=5)
        plt.gca().add_artist(ann)

plt.figure()
plt.scatter(data=df, x='a', y='c', c='blue', s='a', alpha=0.5, picker=5, label='a')
plt.scatter(data=df, x='b', y='c', c='red', s='b', alpha=0.5, picker=5, label='b')
plt.gcf().canvas.mpl_connect('pick_event', handlepick)
plt.show()

如何将注释和点选取事件分开,并告诉它不要注释(如果点已经有注释)?我已经使用标签来决定选择哪个散点系列。

非常感谢。


您可以预先为每个散点创建注释并将所有这些点设置为不可见。单击散点将切换相应注释的可见性。单击注释根本不会执行任何操作。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame({'a': np.random.rand(25)*1000,
                   'b': np.random.rand(25)*1000,
                   'c': np.random.rand(25)})

def handlepick(event):
    artist = event.artist
    lab = artist.get_label()
    if lab in d:
        for ind in event.ind:
            ann = d[lab][ind]
            ann.set_visible(not ann.get_visible() )
    plt.gcf().canvas.draw()


plt.figure()
plt.scatter(data=df, x='a', y='c', c='blue', s='a', alpha=0.5, picker=5, label='a')
plt.scatter(data=df, x='b', y='c', c='red', s='b', alpha=0.5, picker=5, label='b')

d = {"a" : [], "b": []}
for i  in range(len(df)):
    ann = plt.annotate("blue", xy=(df["a"].iloc[i], df["c"].iloc[i]), visible=False)
    d["a"].append(ann)
    ann = plt.annotate("red", xy=(df["b"].iloc[i], df["c"].iloc[i]), visible=False)
    d["b"].append(ann)
plt.gcf().canvas.mpl_connect('pick_event', handlepick)
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个挑选事件干扰 的相关文章

随机推荐

  • '迭代时不能对不可变值使用变异 getter:'self' 是不可变的'?

    有谁知道为什么self indexCount in the ForEach给出了错误Cannot use mutating getter on immutable value self is immutable错误 我可以提供aView w
  • 移动视口尺寸是否大于屏幕尺寸?

    我在谷歌上搜索了移动视口 发现它是一个虚拟窗口 大多数移动浏览器都在其中渲染页面 视口比屏幕宽 here https developer mozilla org en docs Mozilla Mobile Viewport meta ta
  • 如何使用 C++ 获取 Windows 中的应用程序数据路径?

    我查遍了互联网 似乎没有找到合适的解决方案 我希望能够在 C 中以编程方式获取路径 ALLUSERSPROFILE Application Data 资源管理器可以将其转换为真实路径 我可以在不依赖第三方代码的情况下做到这一点吗 Use S
  • 复制带有格式的 Notepad++ 文本?

    我正在使用 Notepad 来编写代码 如何复制 Notepad 中的代码及其格式以粘贴到 Microsoft Word 中 即语法突出显示等 这是当您选择要复制为 html 的文本时来自 notepad 的图像 and how the f
  • hasattr 被称为方法,但它看起来像函数[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在 Python 中 函数接受参数并可选择返回信息 functionname param1 param2 returnvalue functio
  • 如何获取旋转器中的项目数量?

    如何动态获取微调器中的项目数 你可以试试 mSpinner getAdapter getCount
  • AppWidgetProvider 和 RemoteViewsService.RemoteViewsFactory 之间共享数据的正确方法是什么

    目前 我的AppWidgetProvider有静态数据 它用于传递信息AppWidgetProvider RemoteViewsService RemoteViewsFactory public class MyAppWidgetProvi
  • 是什么原因导致 grunt.js 中的 /*global module: false*/

    许多 grunt js 脚本以以下内容开头 global module false module exports function grunt 但是第一行注释的原因是什么 它是 JSLint 或 JSHint 的指令 它告诉 JSLint
  • 如何矢量化 3D Numpy 数组

    我有一个 3D numpy 数组 例如a np zeros 100 100 20 我想对每个执行操作x y涉及所有元素的位置z轴 结果存储在一个数组中 例如b np zeros 100 100 在同一个对应的x y位置 现在我使用 for
  • /storage/logs 处不存在现有目录且不可构建:权限被拒绝

    我在 OVH Web 服务器上部署 Laravel 时遇到问题 制作完成后 composer update php artisan cache clear php artisan route clear php artisan dump a
  • Amazon Redshift-备份和恢复最佳实践?

    我们在 Redshift 中有一组表 其中的列具有 IDENTITY 属性 用于序列生成 在测试阶段 需要进行备份和恢复 这是每个测试周期的重复活动 我们按照以下流程进行备份然后恢复 并遇到以下问题 传统方式 使用 CREATE TABLE
  • 是否可以同时从多个 Mercurial 存储库中提取数据?

    我希望能够做这样的事情 hg pull http server repo1 http server repo2 http otherserver repo 并让所有变更集立即下来 添加了 x 变更集 并对 z 文件进行了 y 更改 消息聚合
  • 如何在java中使用布尔值对ArrayList进行排序?

    我有一个带有自定义对象的 ArrayList 它们包含一个我想要排序的复选框对象 我正在使用这个比较器函数对其进行排序 我使用 XOR 运算符来检查它们是否彼此相等 然后将其取反 然而 这不起作用 并且列表保持相同的顺序 有谁知道出了什么问
  • 适用于 Littler 或 Rscript 的外部图形设备

    我真的很喜欢 Littler 对于使用 R 编写脚本非常有用 但我不知道如何使用 gnuplot 中的外部图形设备 例如使用 Octave 我能够生成所需的图表 但我必须使用 Sys sleep 并且我不想这样做 因为我想以交互方式自行关闭
  • 如果图像尺寸太大,在 SQL Server 中存储图像的最佳方式是什么?

    是否可以在 SQL Server 中存储大小为 3GB 的图像 我知道这似乎是不切实际的场景 但我很好奇是否可以以任何方式将图像保存在数据库中 微软建议您使用文件流 https msdn microsoft com en GB librar
  • 在 GCC 中启用严格浮点模式

    我还没有创建一个程序来查看 GCC 是否需要它通过 当我这样做时 我想知道如何启用严格的浮点模式 这将允许在运行和计算机之间重现结果 谢谢 编译用 msse2在支持它的 Intel AMD 处理器上 您几乎就可以实现这一目标 不要让任何库将
  • Selenium WebDriver jQuery

    我对 Selenium WebDriver 非常陌生 我正在学习如何使用 jQuery 选择器来处理元素 而不是使用 XPath 表达式 ID 等 您能否提供一个链接来帮助我 在该链接中我可以找到有关如何在 Selenium WebDriv
  • Linux 中的 C 聊天室 / Socket 编程

    我有一个简单的服务器和客户端 C 代码来使用线程 pthread 库 为多客户端创建一个聊天室 我一直遇到的问题是 我无法想出一种方法让服务器将客户端通过套接字发送到所有其他客户端的每条消息写入 我在这里读过其他类似的帖子 但很无奈 请帮助
  • 使用 JavaScript/AngularJS 将数组转换为对象

    我需要将父数组内的数组转换为对象以匹配我的数据库模型数据 我有这样的数组 emails Array 2 0 email protected cdn cgi l email protection 1 email protected cdn c
  • 多个挑选事件干扰

    我有几个数据系列分散在一个图中 并且希望能够为它们切换注释 问题是 有时会触发两个拾取事件 当用户单击注释和点内的点时 注释 拾取事件会清除注释 但 点 拾取事件会将其放回原处 因此效果是切换不起作用 df pd DataFrame a n