用于选择绘图区域的矩形并找到最大值

时间:2017-05-31 03:02:56

标签: python matplotlib

我正在寻找有关从哪里开始编写我的最新项目的建议。

我希望能够在matplotlib图上绘制稍微透明的矩形,并返回此正方形内的值。该项目的最终目标是返回该区域中的最大值,并在以后用它进行进一步分析。

这是我以前没有亲眼见过的事情,也不知道从哪个项目开始。我希望用这段代码指出正确的方向。

感谢您提供任何建议。

example of final look.

1 个答案:

答案 0 :(得分:6)

要以交互方式绘制矩形,您可以使用RectangleSelector。 matplotlib页面上有an example

然后,您可以找出矩形范围内的哪些点,并使用相应的numpy函数找到最大值。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets  import RectangleSelector

xdata = np.linspace(0,9*np.pi, num=301)
ydata = np.sin(xdata)*np.cos(xdata*2.4)

fig, ax = plt.subplots()
line, = ax.plot(xdata, ydata)
point, = ax.plot([],[], marker="o", color="crimson")
text = ax.text(0,0,"")

def line_select_callback(eclick, erelease):
    x1, y1 = eclick.xdata, eclick.ydata
    x2, y2 = erelease.xdata, erelease.ydata

    mask= (xdata > min(x1,x2)) & (xdata < max(x1,x2)) & \
          (ydata > min(y1,y2)) & (ydata < max(y1,y2))
    xmasked = xdata[mask]
    ymasked = ydata[mask]

    if len(xmasked) > 0:
        xmax = xmasked[np.argmax(ymasked)]
        ymax = ymasked.max()
        tx = "xmax: {:.3f}, ymax {:.3f}".format(xmax,ymax)
        point.set_data([xmax],[ymax])
        text.set_text(tx)
        text.set_position((xmax,ymax))
        fig.canvas.draw_idle()


rs = RectangleSelector(ax, line_select_callback,
                       drawtype='box', useblit=False, button=[1], 
                       minspanx=5, minspany=5, spancoords='pixels', 
                       interactive=True)

plt.show()

enter image description here