在多个子图上反映事件处理

2023-11-25

我正在尝试创建一个包含 4 个子图的交互式图。理想情况下,单击其中一个子图将在其余子图中产生相同的结果(镜像单击)。

到目前为止,我只能单独单击它们并使用 mpldatacursor 获取特定数据。

在此图中,单击事件将导致所有 4 个图表显示 x、y、z 的相应数据:

plot

import matplotlib.pyplot as plt
import numpy as np
from mpldatacursor import datacursor
fig, ((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2, 
ncols=2,sharex=True, sharey=True, figsize=(60, 20))
plt.subplots_adjust(wspace=0.08, hspace=0.08)
ax1.imshow(np.random.random((10,10)))
ax2.imshow(np.random.random((10,10)))
ax3.imshow(np.random.random((10,10)))
ax4.imshow(np.random.random((10,10)))
datacursor(display='multiple',formatter='x:{x:.0f}\n  y:{y:.0f}\n z:
{z}'.format,draggable=True,fontsize=10)
plt.show()

一次注释多个图像是不可能的mpldatacursor你使用的包。但是您可以编写自己的“数据光标”来注释图像。

这可能如下所示。

import matplotlib.pyplot as plt
import numpy as np

fig, ((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2, 
                                          ncols=2,sharex=True, sharey=True)
plt.subplots_adjust(wspace=0.08, hspace=0.08)
ax1.imshow(np.random.random((10,10)))
ax2.imshow(np.random.random((10,10)))
ax3.imshow(np.random.random((10,10)))
ax4.imshow(np.random.random((10,10)))

class ImageCursor():
    def __init__(self, axes, fmt='x:{x}\ny:{y}\nz:{z:.3f}'):
        self.fmt = fmt
        self.axes = axes
        self.fig = self.axes[0].figure
        self.ims = []
        self.annot = []
        for ax in self.axes:
            ax.images[0].set_picker(True)
            self.ims.append(ax.images[0])
            annot = ax.annotate("",xy=(0,0), xytext=(-30,30),
                                textcoords="offset points",
                                arrowprops=dict(arrowstyle="->",color="w",
                                                connectionstyle="arc3"),
                                va="bottom", ha="left", fontsize=10,
                                bbox=dict(boxstyle="round", fc="w"),)
            annot.set_visible(False)
            self.annot.append(annot)
        self.cid = self.fig.canvas.mpl_connect("pick_event", self.pick)

    def pick(self,event):
        e = event.mouseevent
        if e.inaxes:
            x,y = int(np.round(e.xdata)), int(np.round(e.ydata))
            self.annotate((x,y))
    def annotate(self,X):
        for annot, im in zip(self.annot, self.ims):
            z = im.get_array()[X[1],X[0]]
            annot.set_visible(True)
            annot.set_text(self.fmt.format(x=X[0],y=X[1],z=z))
            annot.xy = X
        self.fig.canvas.draw_idle()

ic = ImageCursor([ax1,ax2,ax3,ax4])            

plt.show()

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在多个子图上反映事件处理 的相关文章

随机推荐

  • 不安全的 JavaScript 尝试访问 Google Chrome 中的框架

    我们的网络应用程序 基于 HTML5 SVG 和 JS 在除 Google Chrome 之外的所有浏览器中运行良好 在 Google Chrome 中 正常的 javascript 事件运行良好 但是 附加到 iFrame 的所有 jav
  • PowerShell - Set-Culture 似乎没有改变任何东西

    我有一个云服务 Web 角色 需要在其上运行一些 PowerShell 以确保服务器始终设置为正确的区域性 en AU 原因是微软可以随时重置文化价值观 当我跑步时 Get Culture I get 1033 en US English
  • 从数组中删除多个索引

    我有一个数组 我想删除一堆索引 var arr 0 1 2 3 4 5 6 var rmIndices 1 4 5 从 arr 中删除索引 1 4 5 的最佳方法是什么 注意PermutationGenerator在 Swift 3 中将会
  • 使用 Python 的 Vcard 解析器

    我正在解析我的 vcard 信息 复制到 txt 文件 以提取name number并将其放入字典中 数据样本 BEGIN VCARD VERSION 2 1 N MEO Apoio FN Apoio MEO TEL CELL PREF 1
  • SQL Server 计算列

    我有两列 都是整数 Wins and Losses 我有一个计算列WinPercentage as a decimal 14 3 我希望这是 WinPercentage Wins Losses Wins 其语法是什么 CREATE TABL
  • 如何在 gtsummary 中向“未知”添加百分比

    我有一个连续变量 其中有很大比例的未知数 我的顾问要求我将百分比放在该栏中的旁边 这个 reprex 模仿了我想做的事情 library tidyverse library gtsummary trial gt included with
  • 在 JavaScript 中使用“prototype”与“this”?

    有什么区别 var A function this x function do something and var A function A prototype x function do something 这些例子有非常不同的结果 在查
  • python 与 __le__、__ge__ 的错误?

    是我还是Python对以下代码感到困惑 我希望 le 被称为a lt ab not ge usr bin env python2 class B object def ge self other print ge unexpectedly
  • 按行计算平均日期

    我希望按行获取平均日期 其中每行包含两个日期 最终我找到了一个方法 发布在下面 不过 我使用的方法似乎比较麻烦 有没有更好的办法 my data read table text OBS MONTH1 DAY1 YEAR1 MONTH2 DA
  • 错误:找不到函数“%>%”

    我正在 R 中运行一个示例 完成这些步骤 到目前为止一切正常 除了此代码产生错误 words lt dtm gt as matrix gt colnames gt function x x nchar x lt 20 错误 找不到函数 gt
  • 从 WAV 文件中解码 DTMF

    继我的先前的问题 我的目标是从 C 检测 WAV 文件中的 DTMF 音调 然而 我真的很难理解这是如何做到的 我知道 DTMF 使用频率组合 并且可以使用 Goertzel 算法 以某种方式 我抓取了 Goertzel 代码片段 并尝试将
  • 服务器端文件浏览

    我正在开发一个 Web 应用程序 它从一组文本文件中读取数据并将其映射到 MySQL 数据库 目前 该表单需要手动输入文件路径 但我想向该字段添加一个文件选择器 以使该部分的设置不那么繁琐 我找到的解决方案都允许选择单个文件 但我正在寻找一
  • 如何使用 Selenium 自动化 Firefox Mobile?

    我需要在 Firefox Mobile 中运行 Selenium 测试 有人能描述一个简单的方法来做到这一点吗 我的调查表明 Firefox 移动版不受支持Appium one two Firefox Desktop has built i
  • 通过获取每个子项的位置动态地将子项添加到 LinearLayout

    我在获取孩子的位置时遇到问题线性布局 首先 我动态添加一些按钮 然后尝试返回每个子项的索引并将其显示到TextView 我在这里分享代码 java源代码 private String categories private LinearLay
  • 使用 Sass 从媒体查询中扩展选择器

    我有一个项目类和一个紧凑的 修饰符 类 item item compact styles to make item smaller 这可以 不过 我想添加一个 media强制的查询 item当屏幕足够小时 类要紧凑 乍一看 这就是我试图做的
  • 向场景添加灯光没有效果

    我刚刚开始玩 Three JS 但我一开始就陷入困境 当我向场景添加灯光时 它没有任何效果 renderer new THREE WebGLRenderer camera new THREE PerspectiveCamera 45 Vie
  • 使用“cv::inRange”(OpenCV) 选择正确的 HSV 上下边界进行颜色检测

    I have an image of a coffee can with an orange lid position of which I want to find Here is it gcolor2 utility shows HSV
  • Shift-Tab 在 Emacs 中产生神秘错误

    我正在尝试学习org mode当我退出 emacs 时 注意到我的文件被整齐地折叠起来 按下时S TAB在尝试展开整个文件时 我在迷你缓冲区中收到以下错误消息 M z is undefined 谷歌搜索错误没有帮助 知道打嗝发生在哪里以及如
  • jstree 类型插件不显示自定义图标

    我有一个简单的 HTML 布局 如下所示 div ul li a href some category 1 a ul li a href some text a li ul ul li a href some text a li ul li
  • 在多个子图上反映事件处理

    我正在尝试创建一个包含 4 个子图的交互式图 理想情况下 单击其中一个子图将在其余子图中产生相同的结果 镜像单击 到目前为止 我只能单独单击它们并使用 mpldatacursor 获取特定数据 在此图中 单击事件将导致所有 4 个图表显示