精华内容
下载资源
问答
  • 我使用pyplot中的函数plot()和hist()(没有任何颜色定义)来生成...我找到了一个解决方案plt.gca().set_color_cycle(None)感谢在Matplotlib中重置颜色周期下面的代码应该可以立即使用,以完成我的关于高斯拟合和直方图...

    我使用pyplot中的函数plot()和hist()(没有任何颜色定义)来生成以下图形:

    将包括更多的数据集。 这就是为什么我要对拟合曲线和相关的直方图使用相同的颜色,以使其具有一定的可区分性。

    我找不到任何与此相关的信息。

    我找到了一个解决方案

    plt.gca().set_color_cycle(None)

    感谢在Matplotlib中重置颜色周期

    下面的代码应该可以立即使用,以完成我的关于高斯拟合和直方图颜色相同的问题

    import matplotlib.pyplot as plt

    import matplotlib.mlab as mlab

    import numpy as np

    list_of_lists = []

    for i in range(2):

    list = np.random.normal(0, 1, 100)

    list = list.tolist()

    list_of_lists.append(list)

    plt.figure()

    plt.hist(list_of_lists, bins = 10, normed=True)

    numb_lists = len(list_of_lists)

    plt.gca().set_color_cycle(None)

    for i in range(0, numb_lists):

    list = list_of_lists[i][:]

    mean = np.mean(list)

    variance = np.var(list)

    sigma = np.sqrt(variance)

    x = np.linspace(min(list), max(list), 100)

    plt.plot(x, mlab.normpdf(x, mean, sigma))

    为了确保曲线图和直方图具有相同的颜色,我的建议是为曲线图和最佳拟合线固定颜色。

    如果您在此处查看示例http://matplotlib.org/1.2.1/examples/pylab_examples/histogram_demo.html

    然后在pyplot的python文档中http://matplotlib.org/1.2.1/api/pyplot_api.html?highlight=hist#matplotlib.pyplot.hist

    matplotlib.pyplot.hist方法具有kwarg颜色,可让您选择所需的直方图颜色。在示例中,他们将facecolor ='green'设置为

    然后,为了获得最佳拟合线,可以选择以相同颜色绘制它。我需要查看代码以给出更精确的指示。但是,如果我们回到此处的示例,则会设置行属性:

    l = plt.plot(bins, y, 'r--', linewidth=1)

    因此,如果我们希望拟合线像其他直方图一样为绿色,则可以使用:

    l = plt.plot(bins, y, 'r--', linewidth=1, color = 'green')

    希望这会有所帮助,如果您不发布任何代码行,则不能为您提供更多具体提示。

    感谢你的付出。 同时也对缺少代码感到抱歉。 我会马上改正

    展开全文
  • python scipy.optimize curve_fit 多高斯拟合

    万次阅读 2014-10-24 20:21:22
    import numpy as np import pylab as plt #import matplotlib.pyplot as plt from scipy.optimize import curve_fit from scipy import asarray as ar,exp x = ar(range(10)) y = ar([0,1,2,3,4,5,4,3,2,1




    import numpy as np
    import pylab as plt
    #import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
    from scipy import asarray as ar,exp
    
    x = ar(range(10))
    y = ar([0,1,2,3,4,5,4,3,2,1])
    
    
    def gaussian(x,*param):
        return param[0]*np.exp(-np.power(x - param[2], 2.) / (2 * np.power(param[4], 2.)))+\
               param[1]*np.exp(-np.power(x - param[3], 2.) / (2 * np.power(param[5], 2.)))
    
    
    popt,pcov = curve_fit(gaussian,x,y,p0=[3,4,3,6,1,1])
    print popt
    print pcov
    
    plt.plot(x,y,'b+:',label='data')
    plt.plot(x,gaussian(x,*popt),'ro:',label='fit')
    plt.legend()
    plt.show()
    



    展开全文
  • 我想在Python中将高斯曲线拟合为质谱数据。现在,我一次将数据拟合成一个高斯 - 一次一个范围。如何在Python中拟合多高斯曲线到质谱数据?有没有更简化的方法来做到这一点?有没有办法通过循环运行数据来在每...

    我想在Python中将多条高斯曲线拟合为质谱数据。现在,我一次将数据拟合成一个高斯 - 一次一个范围。如何在Python中拟合多个高斯曲线到质谱数据?

    有没有更简化的方法来做到这一点?有没有办法通过循环运行数据来在每个峰值处绘制高斯?我猜想有一个更好的方法,但我已经梳理了互联网。

    我的两个高斯图如下所示。

    下面是我当前的代码:

    import numpy as np

    import matplotlib.pyplot as plt

    import scipy.optimize as opt

    from scipy.interpolate import interp1d

    RGAdata = np.loadtxt("/Users/ilenemitchell/Desktop/RGAscan.txt", skiprows=14)

    RGAdata=RGAdata.transpose()

    x=RGAdata[0]

    y=RGAdata[1]

    # graph labels

    plt.ylabel('ion current')

    plt.xlabel('mass/charge ratio')

    plt.xticks(np.arange(min(RGAdata[0]), max(RGAdata[0])+2, 2.0))

    plt.ylim([10**-12.5, 10**-9])

    plt.title('RGA Data Jul 25, 2017')

    plt.semilogy(x, y,'b')

    #fitting a guassian to a peak

    def gauss(x, a, mu, sig):

    return a*np.exp(-(x-mu)**2/(2*sig**2))

    fitx=x[(x>40)*(x<43)]

    fity=y[(x>40)*(x<43)]

    mu=np.sum(fitx*fity)/np.sum(fity)

    sig=np.sqrt(np.sum(fity*(fitx-mu)**2)/np.sum(fity))

    print (mu, sig, max(fity))

    popt, pcov = opt.curve_fit(gauss, fitx, fity, p0=[max(fity),mu, sig])

    plt.semilogy(x, gauss(x, popt[0],popt[1],popt[2]), 'r-', label='fit')

    #second guassian

    fitx2=x[(x>26)*(x<31)]

    fity2=y[(x>26)*(x<31)]

    mu=np.sum(fitx2*fity2)/np.sum(fity2)

    sig=np.sqrt(np.sum(fity2*(fitx2-mu)**2)/np.sum(fity2))

    print (mu, sig, max(fity2))

    popt2, pcov2 = opt.curve_fit(gauss, fitx2, fity2, p0=[max(fity2),mu, sig])

    plt.semilogy(x, gauss(x, popt2[0],popt2[1],popt2[2]), 'm', label='fit2')

    plt.show()

    2017-07-28

    MsPhyz

    +1

    请问您可以提供一些示例数据吗?另外,您是否可以用箭头显示图像,以表明您希望用高斯拟合突出显示什么? –

    +0

    当然。我刚刚更新了照片(上面链接)。我还上传了一个示例数据的链接。 Thx –

    +0

    您必须想出一种方法来识别峰值及其周围的范围,很可能使用滚动窗口技术。一旦你写了这个函数,你可以遍历整个数据集。 –

    展开全文
  • 需要对数据进行函数拟合,首先画一下二维散点图,目测一下大概的分布,所谓正态分布,就是高斯分布,正态曲线是一种特殊的高斯曲线。python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合类型...

    需要对数据进行函数拟合,首先画一下二维散点图,目测一下大概的分布,

    所谓正态分布,就是高斯分布,正态曲线是一种特殊的高斯曲线。

    python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合很多类型的曲线。scipy.optimize提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。

    import numpy as np

    import matplotlib.pyplot as plt

    from scipy.optimize import curve_fit

    import math

    #单个高斯模型,如果曲线有多个波峰,可以分段拟合

    def func(x, a,u, sig):

    return a*np.exp(-(x - u) ** 2 / (2 * sig ** 2)) / (sig * math.sqrt(2 * math.pi))

    #混合高斯模型,多个高斯函数相加

    def func3(x, a1, a2, a3, m1, m2, m3, s1, s2, s3):

    return a1 * np.exp(-((x - m1) / s1) ** 2) + a2 * np.exp(-((x - m2) / s2) ** 2) + a3 * np.exp(-((x - m3) / s3) ** 2)

    #正弦函数拟合

    #def fmax(x,a,b,c):

    # return a*np.sin(x*np.pi/6+b)+c

    #fita,fitb=optimize.curve_fit(fmax,x,ymax,[1,1,1])

    #非线性最小二乘法拟合

    #def func(x, a, b,c):

    # return a*np.sqrt(x)*(b*np.square(x)+c)

    #用3次多项式拟合,可推广到n次多项式,数学上可以证明,任意函数都可以表示为多项式形式

    #f1 = np.polyfit(x, y, 3)

    #p1 = np.poly1d(f1)

    #yvals = p1(x) #拟合y值

    #也可使用yvals=np.polyval(f1, x)

    拟合,并对参数进行限制,bounds里面代表参数上下限,p0是初始范围,默认是[1,1,1]

    x=np.arange(1,206,1)

    num = []<-自己的y值

    numhunt = []<-自己的y值

    y = np.array(num)

    yhunt = np.array(numhunt)

    popt, pcov = curve_fit(func3, x, y)

    popthunt, pcovhunt = curve_fit(func, x, yhunt,p0=[2,2,2])

    ahunt = popthunt[0]

    uhunt = popthunt[1]

    sighunt = popthunt[2]

    a1 = popt[0]

    u1 = popt[1]

    sig1 = popt[2]

    a2 = popt[3]

    u2 = popt[4]

    sig2 = popt[5]

    a3 = popt[6]

    u3 = popt[7]

    sig3 = popt[8]

    yvals = func3(x,a1,u1,sig1,a2,u2,sig2,a3,u3,sig3) #拟合y值

    yhuntvals = func(x,ahunt,uhunt,sighunt) #拟合y值

    print(u'系数ahunt:', ahunt)

    print(u'系数uhunt:', uhunt)

    print(u'系数sighunt:', sighunt)

    #绘图

    plot1 = plt.plot(x, y, 's',label='insect original values')

    plot2 = plt.plot(x, yvals, 'r',label='insect polyfit values')

    plot3 = plt.plot(x, yhunt, 's',label='predator original values')

    plot4 = plt.plot(x, yhuntvals, 'g',label='predator polyfit values')

    plt.xlabel('date')

    plt.ylabel('Nightly catches log10(N+1)')

    plt.legend(loc=4) #指定legend的位置右下角

    plt.title('insect/predator')

    plt.show()

    下图是单个和多个高斯拟合图像

    476776-20190602143407490-679657886.png

    下图是多项式拟合图像

    476776-20190602142323373-416848767.png

    图例的位置可以自定义设置

    lower left

    upper center

    lower right

    center

    upper left

    center left

    upper right

    lower center

    best

    center right

    right

    展开全文
  • 需要对数据进行函数拟合,首先画一下二维散点图,目测一下大概的分布,所谓正态分布,就是高斯分布,正态曲线是一种特殊的高斯曲线。python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合类型...
  • 我正在编写一个脚本,使用Scipy,Numpy和Matplotlib在Python中将峰形拟合到光谱数据 . 它可以同时适应个峰值 . 峰值曲线(现在)是Pseudo-Voigt,它是高斯(aka Normal)和Lorentzian(aka Cauchy)分布的线性组合 .我有...
  • 程序主要实现上篇文章中所提到的随机噪声拟合高斯分布的过程,话不说,直接上代码: #引入必要的包 import argparse import numpy as np from scipy.stats import norm import tensorflow as tf import ...
  • MICE估算,秩序统计回归和高斯插补 调解分析 图形包括用于数据和模型结果的可视分析的绘图功能 I / O 用于读取Stata .dta文件的工具,但是pandas具有更新版本 表输出为ascii,latex和html Miscellaneous models...

空空如也

空空如也

1 2 3 4 5
收藏数 81
精华内容 32
关键字:

matplotlib多高斯拟合