如何使 Axes 对事件透明?

吉穆特

我正在尝试找到一种方法来Axes为事件进行对象传递

对于上下文,我有一个带有 6 个小子图的图。它们中的每一个都通过在用户瞄准的位置显示光标点和文本信息来响应鼠标移动事件。我还做了它,以便单击子图将使其与图形一样大,以获得更好的可见性。将鼠标移到不可见轴上时,event.inaxes尽管设置为不可见,但仍将指向该轴,这是我想避免的。

下面是 MRE:

import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.set_gid("ax1")
ax2.set_gid("ax2")
fig.show()

def on_movement(event):
    """Write on the figure in which `Axes`object the event happened."""

    width, height = fig.bbox.bounds[2:]
    x = event.x/width
    y = event.y/height
    text = ax.get_gid() if (ax := event.inaxes) is not None else "None"
    fig.texts[:] = []
    fig.text(x, y, s=text, transform=fig.transFigure, c="white", bbox=dict(fc="#0055AA", ec="black"))
    fig.canvas.draw()

fig.canvas.mpl_connect("motion_notify_event", on_movement)

正如预期的那样,当您将鼠标悬停在ax1、空白处和 上时ax2,您将看到出现这三个文本之一:在此处输入图片说明

ax1.set_position((1/3, 1/3, 2/3, 2/3))

与我任意调整大小和移动ax1以使其与ax2.

在此处输入图片说明

ax2.set_visible(False)

现在这是我的问题。不可见轴仍会触发事件。有没有办法让一些轴对事件“透明”?显然,在回调中对所有案例进行排序的常用技术在这里不起作用。

在此处输入图片说明

目前设想的解决方案:

  • 理想情况下,找到一个类似的设置,zorder以便“最高”轴获得事件。
  • 丑陋的解决方法:将不可见轴的位置设置为((0, 0, 1e-10, 1e-10))
  • 不那么难看:使用图形坐标将event.x,转换event.yevent.xdataevent.ydata因为我知道唯一可见的斧头。基本上xdata1, ydata1 = ax1.transAxes.inverted().transform((event.x, event.y))ifevent.inaxes不是 None + 看看是否有边缘情况。

后者已经实现并且确实有效,因此如果您想使用该方法编写回复,请节省您的时间。我最感兴趣的是我会错过的令人惊叹的单线,例如ax2.set_silenced(True).

Python 3.8.5
Matplotlib 3.1.3

吉穆特

好吧,设置适当zorder确实有效。

ax1.set_zorder(2)
ax2.set_zorder(1)
...

def on_movement(event):
    ...
    fig.text(x, y, ..., zorder=1000)
    ...

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对事件使用OpenAPI / Swagger规范?

如何生成抛物面并使其对事件做出响应

如何按周对事件进行分组和计数?

我如何实现对事件侦听器的功能

如何在 Angular 中触发对事件的操作

如何对事件进行反跳?(语法错误?)

如何按年,月,日对事件列表进行分组

如何基于DataFrame中的多个条件对事件进行计数

如何获得要绘制的matplotlib Axes实例?

如何绘制matplotlib.axes列表?

Spring Integration中如何使用聚合器对事件进行分组/批处理

如何创建对事件做出反应的挂钩以加载更多数据?

如何在函数内部触发对事件发射器的订阅。角单元测试

如何使用响应式扩展按空闲时段对事件进行分组

如何使用SQL在给定的时间窗口内对事件时间进行排名?

如何在输入字段上对事件侦听器进行单元测试?

我应该如何对事件驱动的服务进行健康检查

如何在 matplotlib.axes.Axes.stem 图中显示时间线?

使用RabbitMQ发布/订阅微服务事件总线时如何对事件进行重复数据删除

nativescript如何使元素透明以触摸事件

对事件采取行动

对事件使用委托

如何使用 Django 单元测试测试 django-axes?

如何在Matplotlib中使用Axes3D缩放

如何从matplotlib.pyplot.axes获取投影类型?

如何抑制/忽略(/修复)matplotlib Axes3D ValueError?

如何调整 Matplotlib.Axes.scatter 方法中的“c”参数?

如何从Matplotlib中的Figure或Axes对象获取绘图数据的限制?

给定其子查询限制,如何在MS Access中查询成对事件出席率?