gpt4 book ai didi

python - matplotlib 连接到主页/后退/前进按钮事件

转载 作者:太空狗 更新时间:2023-10-29 17:12:59 25 4
gpt4 key购买 nike

有谁知道如何从 matplotlib 图形中“获取”“主页”、“后退”和“前进”按钮事件?

我需要事件来调用我的一些函数,以便在按下这些按钮时我的绘图可以正确运行,即默认行为没有按照我需要的方式运行

Matplotlib 假设底层数据集是恒定的,它需要做的就是重置 x/y 轴限制并重新绘制这些按钮 - 不幸的是,这个假设对我来说是不正确的 - 我有一个数据堆栈需要被推送和当这些按钮事件被触发时弹出

最佳答案

Matplotlib 不提供“主页”、“后退”或“前进”按钮事件。

要添加将使用“home”、“back”或“forward”按钮事件调用的回调,一种常见的方法是子类化 matplotlib 后端。
但我不赞成这种做法。我认为它有两个缺点:

  1. 如果您想使用不同的后端,则必须对它们中的每一个进行子类化。
  2. 在 matplotlib 之外部署您自己的后端并非易事。您的后端必须是一个模块,该模块必须位于 PYTHONPATH 中。

因为 matplotlib 提供的后端都没有覆盖 NavigationToolbar2homebackforward 方法。我更喜欢更简洁的猴子补丁方法。
例如,您可以用自己的方法替换NavigationToolbar2home

import matplotlib.pyplot as plt
from matplotlib.backend_bases import NavigationToolbar2

home = NavigationToolbar2.home

def new_home(self, *args, **kwargs):
print 'new home'
home(self, *args, **kwargs)

NavigationToolbar2.home = new_home

fig = plt.figure()
plt.text(0.35, 0.5, 'Hello world!', dict(size=30))
plt.show()

我们甚至可以模仿 matplotlib 的 mpl_connect 风格。

import matplotlib.pyplot as plt
from matplotlib.backend_bases import NavigationToolbar2, Event

home = NavigationToolbar2.home

def new_home(self, *args, **kwargs):
s = 'home_event'
event = Event(s, self)
event.foo = 100
self.canvas.callbacks.process(s, event)
home(self, *args, **kwargs)

NavigationToolbar2.home = new_home

def handle_home(evt):
print 'new home'
print evt.foo

fig = plt.figure()
fig.canvas.mpl_connect('home_event', handle_home)
plt.text(0.35, 0.5, 'Hello world!', dict(size=30))
plt.show()

关于python - matplotlib 连接到主页/后退/前进按钮事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14896580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com