我想使用lmfit模块将函数拟合到可变数量的数据集,包括一些共享和一些单独的参数.
以下是生成高斯数据并分别拟合每个数据集的示例:
import numpy as np
import matplotlib.pyplot as plt
from lmfit import minimize, Parameters, report_fit
def func_gauss(params, x, data=[]):
A = params['A'].value
mu = params['mu'].value
sigma = params['sigma'].value
model = A*np.exp(-(x-mu)**2/(2.*sigma**2))
if data == []:
return model
return data-model
x = np.linspace( -1, 2, 100 )
data = []
for i in np.arange(5):
params = Parameters()
params.add( 'A' , value=np.random.rand() )
params.add( 'mu' , value=np.random.rand()+0.1 )
params.add( 'sigma', value=0.2+np.random.rand()*0.1 )
data.append(func_gauss(params,x))
plt.figure()
for y in data:
fit_params …Run Code Online (Sandbox Code Playgroud) 我正在使用wxPython在绘图中绘制数据,其中y轴上的数据限制随数据而变化.我想动态地改变轴而不重绘整个画布,canvas.draw()而不是像blitting我为剧情本身那样使用它.
我得到的工作是改变y轴,我得到了yticks动画与情节,不幸的是ylabels消失了,我无法找到解决方案.原因是设置get_yaxis().set_animated(True)轴的设置.
我在下面汇总了一个小例子.我在这里错过了什么?
import matplotlib
matplotlib.use('WXAgg')
import wx
import pylab as p
import numpy as npy
from time import sleep
ax = p.subplot(111)
canvas = ax.figure.canvas
x = npy.arange(0,2*npy.pi,0.01)
line, = p.plot(x, npy.sin(x), animated=True)
ax.get_yaxis().set_animated(True)
def update_line(*args):
if update_line.background is None:
update_line.background = canvas.copy_from_bbox(ax.bbox)
for i in range(20):
canvas.restore_region(update_line.background)
line.set_ydata((i/10.0)*npy.sin(x))
ax.set_ylim(-1*i/5.0-0.5,i/5.0+0.5)
ax.draw_artist(ax.get_yaxis())
ax.draw_artist(line)
canvas.blit(ax.bbox)
sleep(0.1)
print 'end'
update_line.cnt = 0
update_line.background = None
wx.EVT_IDLE(wx.GetApp(), update_line)
p.show()
Run Code Online (Sandbox Code Playgroud)
基本上我正在寻找类似get_ylabels().set_animated(True)但我无法找到它的东西.