# draw one point using subplot
# click and drag to increase/decrease width of -
# a Gaussian curve
# multi_gauss.py https://github.com/jithesh82
import matplotlib.pyplot as plt
from pdb import set_trace
import numpy as np
import sys
sys.path.append('/home/jk/jk/python/xpswork')
from multi_gauss import multiGauss as Gauss
x = np.linspace(0, 2*3.14, 100)
guess = [100, 3, 0.5]
y = Gauss(x, *guess)
press = False
mouse = None
def onPress(event):
global press
global mouse
contains, _ = pnt.contains(event)
# make sure the click is on the object
if contains:
press = True
mouse = event.xdata
print(press)
def onMove(event):
global press
global guess
global mouse
if press == True:
# only for events inside the axes
if event.inaxes == pnt.axes:
print(event.xdata, event.ydata)
x = list(pnt.get_xdata())
if mouse < event.xdata:
guess[2] += 0.01
else:
guess[2] -= 0.01
y = Gauss(x, *[guess[0], guess[1],\
guess[2]])
pnt.set_data(x, y)
#pnt.set_data([event.xdata, event.ydata])
pnt.figure.canvas.draw()
def onRelease(event):
global press
global mouse
press = False
mouse = None
print(press)
pnt.figure.canvas.draw()
fig, ax = plt.subplots()
pnt, = ax.plot(x, y, label='click-drag - increase length')
pnt.set_linewidth(3)
ax.set_title('click-drag - increase length')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.plot(x, Gauss(x, *[guess[0] + 50, guess[1], guess[2]]))
pnt.figure.canvas.mpl_connect('button_press_event', onPress)
pnt.figure.canvas.mpl_connect('motion_notify_event', onMove)
pnt.figure.canvas.mpl_connect('button_release_event', onRelease)
plt.show()
Like this:
Like Loading...
Related