我目前正在研究一个涉及解决一些二维颂歌的问题。我的问题在于计算用弹簧钩住的测试质量位置到2d电位的测试位置。
我想自定义支持的位置,用我的鼠标在支撑将运行的路径的某个矩形上,最好是绘制在潜在等高线图的顶部。
我是python的新手,并且不知道最好的方法是什么。我正在为这个项目使用numpy和matplotlib,以防它可以使用这些包。
非常感谢。
答案 0 :(得分:1)
您必须从几个角度思考问题,即绘制等高线图,通过鼠标进行矩形的某种方式,并最终获得有关绘制的矩形的数据。检查以下配方(最后参见我改编的地方):
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import matplotlib.mlab as mlab
import numpy as np
class Annotate(object):
def __init__(self):
self.ax = plt.gca()
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)
CS = plt.contour(X, Y, Z)
plt.clabel(CS, inline=1, fontsize=10)
plt.title('Simplest default with labels')
self.rect = Rectangle((0,0), 1, 1,color=(0,0,1,0.3))
self.x0 = None
self.y0 = None
self.x1 = None
self.y1 = None
self.ax.add_patch(self.rect)
self.ax.figure.canvas.mpl_connect('button_press_event', self.on_press)
self.ax.figure.canvas.mpl_connect('button_release_event', self.on_release)
self.ax.set_xlim(-3,3)
self.ax.set_ylim(-2,2)
def on_press(self, event):
print('press')
self.x0 = event.xdata
self.y0 = event.ydata
def on_release(self, event):
print('release')
self.x1 = event.xdata
self.y1 = event.ydata
self.rect.set_width(self.x1 - self.x0)
self.rect.set_height(self.y1 - self.y0)
self.rect.set_xy((self.x0, self.y0))
print('Rectangle is:','POS:(',self.x1,',',self.y1,') SIZE:(',self.x1 - self.x0,',',self.y1 - self.y0,')')
self.ax.figure.canvas.draw()
a = Annotate()
plt.show()
,此代码将导致:
,您可以在其中鼠标绘制一个矩形(透明,以便您看到它下方的内容)。它还会向控制台打印矩形的位置和大小:
press
release
Rectangle is: POS:( 0.967741935484 , -0.449790794979 ) SIZE:( 1.43951612903 , -1.46443514644 )
使用此代码,您可以通过替换(希望)获得您要求的结果。请注意,我已根据以下方法调整了此代码: