User Tools

Site Tools


Sidebar

Predmety

Zariadenia

Users

python:def

data file

def.py
#!/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()
def2.py
#!/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()
def3.py
#!/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()
python/def.txt · Last modified: 2021/10/25 08:53 (external edit)