{{:python:feal28-sample1-2.xls|data file}}
#!/usr/bin/python
from pylab import *
y, x = loadtxt("FeAl28-sample1-2.XLS",usecols=(2,3),unpack=True)[:,5:-2]
x = -x
plot(x,y)
data = array(ginput(2))
a,b = polyfit(data[:,0], data[:,1], 1)
plot(x,a*(x+b/a))
figure()
plot(x+b/a-y/a, y)
show()
#!/usr/bin/python
from pylab import *
y, x = loadtxt("FeAl28-sample1-2.XLS",usecols=(2,3),unpack=True)[:,5:-2]
x = -x
plot(x,y)
data = array(ginput(2))
a,b = sort(data[:,0])
c = b-a
xx = array([a-c/5,b+c/5])
m = (x>=a) & (x<=b)
plot(x[m], y[m], lw=5)
a,b = polyfit(x[m], y[m], 1)
plot(xx,a*(xx+b/a))
figure()
plot(x+b/a-y/a, y)
show()
#!/usr/bin/python
from pylab import *
class Point:
def __init__(self, pos, callback=None):
self.callback = callback
self.line = axvline(pos, ls="--", c="k")
self.pos = pos
self.active = False
connect('button_press_event', self.on_press)
connect('button_release_event', self.on_release)
connect('motion_notify_event', self.on_motion)
def on_press(self, e):
if self.line.contains(e)[0]:
self.active = True
self.on_motion(e)
def on_motion(self, e):
if not self.active:
return
self.line.set_xdata(e.xdata)
if self.callback:
self.pos = e.xdata
self.callback()
else:
self.line.figure.canvas.draw()
def on_release(self, e):
self.on_motion(e)
self.active = False
class LineFitter:
def __init__(self, apos, bpos, xdata, ydata):
self.ax = figure().gca()
self.ax.plot(xdata,ydata)
self.a = Point(apos, self.callback)
self.b = Point(bpos, self.callback)
self.xdata = xdata
self.ydata = ydata
self.plot_data, = self.ax.plot([],[],lw=4)
self.plot_fit, = self.ax.plot([],[],lw=2)
self.ax2 = figure().gca()
self.plot_corrected, = self.ax2.plot(xdata,ydata)
def callback(self):
aa,bb = sort([self.a.pos, self.b.pos])
m = (self.xdata>=aa) & (self.xdata<=bb)
self.plot_data.set_data(self.xdata[m], self.ydata[m])
cc = (bb-aa)/5
xx = array([aa-cc,bb+cc])
a,b = polyfit(x[m], y[m], 1)
self.plot_fit.set_data(xx, a*(xx+b/a))
self.plot_corrected.set_data(self.xdata+b/a-self.ydata/a, self.ydata)
#self.ax2.autoscale() ????
self.ax.figure.canvas.draw()
self.ax2.figure.canvas.draw()
y, x = loadtxt("FeAl28-sample1-2.XLS",usecols=(2,3),unpack=True)[:,5:-2]
x = -x
l = LineFitter(amax(x)*0.1, amax(x)*0.2, x,y)
show()