3

Matplotlib 允许创建漂亮的交互式绘图。在按住鼠标左键的同时进行拖动可以让我们左右或上下平移绘图。按住鼠标右键进行拖动可以让我们在与拖动绘图方向平行的轴上进行缩放。我希望能够通过拖动颜色条来复制这种行为。当鼠标悬停在颜色条上时,会出现小手,但拖动不起作用。如果用鼠标左键沿着颜色条拖动会改变颜色条范围(保持 cmin 和 cmax 之间的差异不变)并用鼠标右键拖动会改变 cmin 和 cmax 之间的差异(例如缩放),那就太好了有什么办法可以做到这一点?

到目前为止,该解决方案似乎将涉及某种形式的由 .注册的回调函数fig.canvas.mpl_connect('button_press_event', func)。例如:

def onclick(event):
    tb = plt.get_current_fig_manager().toolbar
    print repr(tb.mode),bool(tb.mode)
    if tb.mode != '':
        print 'button=%d, x=%d, y=%d, xdata=%f, ydata=%f'%(
            event.button, event.x, event.y, event.xdata, event.ydata)

cid = fig.canvas.mpl_connect('button_press_event', onclick)

看起来这里描述了这些事件,但我似乎不知道如何知道我是在颜色栏上还是在情节的其余部分上。

4

1 回答 1

4

event.inaxes是当前事件的斧头:

import numpy as np
from matplotlib import pyplot as plt
from functools import partial

def onclick_cbar(cbar, event):
    if event.inaxes is cbar.ax:
        print cbar.mappable
        print cbar.mappable.get_clim()
        print event.xdata, event.ydata

fig = plt.figure()
y, x = np.mgrid[-1:1:100j, -1:1:100j]
z = np.sin(x**2 + y**2)
pcm = plt.pcolormesh(x, y, z)
cbar = plt.colorbar()
cid = fig.canvas.mpl_connect('button_press_event', partial(onclick_cbar, cbar))
plt.show()
于 2013-03-19T04:51:12.130 回答