matplotlib全缩放颜色条轴

时间:2013-03-19 03:16:06

标签: python matplotlib interactive

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

到目前为止,看起来解决方案将涉及fig.canvas.mpl_connect('button_press_event', func)注册的某种形式的回调函数。 e.g:

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)

看起来事件被描述为here,但我似乎无法弄清楚如何知道我是在彩条还是其他情节。

1 个答案:

答案 0 :(得分:3)

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()