精华内容
下载资源
问答
  • 我使用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')

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

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

    展开全文
  • 在我用不同的方法来拟合高斯:曲线拟合、最小二乘法和高斯混合法sklearn.混合物. 曲线拟合我得到了一个相当好的拟合但如果你把它和我预期的结果相比,那还不够好。用最小二乘法我得到了“很适合”但是我的高斯函数是...

    我的问题的简短版本如下:我有一些数据(行星密度)的柱状图,看起来有3次窥视。现在我要在这个柱状图中加入3个高斯函数。在

    我期待着这个结果。在

    我用不同的方法来拟合高斯:曲线拟合、最小二乘法和高斯混合法sklearn.混合物. 曲线拟合我得到了一个相当好的拟合

    但如果你把它和我预期的结果相比,那还不够好。用最小二乘法我得到了“很适合”

    但是我的高斯函数是胡说八道的,使用高斯混合我什么也做不到,因为我不能真正熟练地使用我在问题示例中看到的代码。在

    现在我有三个问题:最重要的是:我怎样才能更适合我的第三个高斯函数?我已经尝试过调整p0的初始值,但是高斯函数变得更糟,或者根本找不到参数。

    我的最小二乘法怎么了?为什么它给了我这么奇怪的高斯数?有没有办法解决这个问题?我的猜测是不是因为最小二乘法尽一切努力使拟合和实际数据之间的误差最小化?

    我该怎么处理高斯混合呢?我找到了这个帖子

    但不能适应我的问题。在

    我真的很想了解如何恰当地配合,因为我以后要做很多次。问题是我对统计学不是很在行,只是开始用python编程。在

    以下是我的三种不同代码:

    曲线图import numpy as np

    import math

    import matplotlib.pyplot as plt

    from scipy.optimize import curve_fit

    hist, bin_edges = np.histogram(Density, bins=np.logspace(np.log10(MIN), np.log10(MAX), 32))

    bin_centres = (bin_edges[:-1] + bin_edges[1:])/2

    # Define model function to be used to fit to the data above:

    def triple_gaussian( x,*p ):

    (c1, mu1, sigma1, c2, mu2, sigma2, c3, mu3, sigma3) = p

    res = np.divide(1,x)*c1 * np.exp( - (np.log(x) - mu1)**2.0 / (2.0 * sigma1**2.0) ) \

    + np.divide(1,x)*c2 * np.exp( - (np.log(x) - mu2)**2.0 / (2.0 * sigma2**2.0) ) \

    + np.divide(1,x)*c3 * np.exp( - (np.log(x) - mu3)**2.0 / (2.0 * sigma3**2.0) )

    return res

    # p0 is the initial guess for the fitting coefficients (A, mu and sigma above)

    p0 = [60., 1, 1., 30., 1., 1.,10., 1., 1]

    coeff, var_matrix = curve_fit(triple_gaussian, bin_centres, hist, p0=p0)

    # Get the fitted curve

    hist_fit = triple_gaussian(bin_centres, *coeff)

    c1 =coeff[0]

    mu1 =coeff[1]

    sigma1 =coeff[2]

    c2 =coeff[3]

    mu2 =coeff[4]

    sigma2 =coeff[5]

    c3 =coeff[6]

    mu3 =coeff[7]

    sigma3 =coeff[8]

    x= bin_centres

    gauss1= np.divide(1,x)*c1 * np.exp( - (np.log(x) - mu1)**2.0 / (2.0 * sigma1**2.0) )

    gauss2= np.divide(1,x)*c2 * np.exp( - (np.log(x) - mu2)**2.0 / (2.0 * sigma2**2.0) )

    gauss3= np.divide(1,x)*c3 * np.exp( - (np.log(x) - mu3)**2.0 / (2.0 * sigma3**2.0) )

    plt.plot(x,gauss1, 'g',label='gauss1')

    plt.plot(x,gauss2, 'b', label='gauss2')

    plt.plot(x,gauss3, 'y', label='gauss3')

    plt.gca().set_xscale("log")

    plt.legend(loc='upper right')

    plt.ylim([0,70])

    plt.suptitle('Triple log Gaussian fit over all Data', fontsize=20)

    plt.xlabel('log(Density)')

    plt.ylabel('Number')

    plt.hist(Density, bins=np.logspace(np.log10(MIN), np.log10(MAX), 32), label='all Densities')

    plt.plot(bin_centres, hist, label='Test data')

    plt.plot(bin_centres, hist_fit, label='Fitted data')

    plt.gca().set_xscale("log")

    plt.ylim([0,70])

    plt.suptitle('triple log Gaussian fit using curve_fit', fontsize=20)

    plt.xlabel('log(Density)')

    plt.ylabel('Number')

    plt.legend(loc='upper right')

    plt.annotate(Text1, xy=(0.01, 0.95), xycoords='axes fraction')

    plt.annotate(Text2, xy=(0.01, 0.90), xycoords='axes fraction')

    plt.savefig('all Densities_gauss')

    plt.show()

    租赁广场

    它本身看起来不坏,但3高斯人是可怕的。看这里

    ^{pr2}$

    高斯混合

    就像我之前说的,我不太懂高斯混合。我不知道我是否必须像以前那样定义三重高斯,或者仅仅定义高斯就足够了,高斯混合会发现有一个三重高斯。

    我也不知道我在哪里必须使用哪些数据,因为当我使用数据箱和历史值时,“拟合曲线”只是相互连接的数据点。所以我想我用错了数据。在

    我不明白的部分是拟合GMM和手工构造函数作为高斯和。hist, bin_edges = np.histogram(Density, bins=np.logspace(np.log10(MIN), np.log10(MAX), 32))

    bin_centres = (bin_edges[:-1] + bin_edges[1:])/2

    plt.hist(Density, bins=np.logspace(np.log10(MIN), np.log10(MAX), 32), label='all Densities')

    plt.gca().set_xscale("log")

    plt.ylim([0,70])

    # Define simple gaussian

    def gauss_function(x, amp, x0, sigma):

    return np.divide(1,x)*amp * np.exp(-(np.log(x) - x0) ** 2. / (2. * sigma ** 2.))

    # My Data

    samples = Density

    # Fit GMM

    gmm = GaussianMixture(n_components=3, covariance_type="full", tol=0.00001)

    gmm = gmm.fit(X=np.expand_dims(samples, 1))

    gmm_x= bin_centres

    gmm_y= hist

    # Construct function manually as sum of gaussians

    gmm_y_sum = np.full_like(gmm_x, fill_value=0, dtype=np.float32)

    for m, c, w in zip(gmm.means_.ravel(), gmm.covariances_.ravel(), gmm.weights_.ravel()):

    gauss = gauss_function(x=gmm_x, amp=1, x0=m, sigma=np.sqrt(c))

    gmm_y_sum += gauss / np.trapz(gauss, gmm_x) *w

    # Make regular histogram

    fig, ax = plt.subplots(nrows=1, ncols=1, figsize=[8, 5])

    ax.hist(samples, bins=np.logspace(np.log10(MIN), np.log10(MAX), 32), label='all Densities')

    ax.plot(gmm_x, gmm_y, color="crimson", lw=4, label="GMM")

    ax.plot(gmm_x, gmm_y_sum, color="black", lw=4, label="Gauss_sum", linestyle="dashed")

    plt.gca().set_xscale("log")

    plt.ylim([0,70])

    # Annotate diagram

    ax.set_ylabel("Probability density")

    ax.set_xlabel("Arbitrary units")

    # Make legend

    plt.legend()

    plt.show()

    我希望至少有人能帮我解决我的一个问题。正如我之前所说的,如果有什么遗漏或者你需要更多的信息,请告诉我。在

    提前谢谢!在

    --编辑--

    Here是我的数据。在

    展开全文
  • Python 高斯拟合

    千次阅读 2020-12-23 20:35:53
    Python 高斯拟合 通常我们进行高斯拟合的办法是导入scipy的curve_fit 包,不过这需要自己手写一个高斯分布的函数表达式,不是很方便,astropy提供了一个写好的高斯拟合包 调包 from astropy.modeling import ...

    Python 高斯拟合

    通常我们进行高斯拟合的办法是导入scipy的curve_fit 包,不过这需要自己手写一个高斯分布的函数表达式,不是很方便,astropy提供了一个写好的高斯拟合包

    1. 调包

    from astropy.modeling import models, fitting
    import numpy as np
    import matplotlib.pyplot as plt
    
    1. 生成一个高斯的数据

    为了检验拟合结果的好坏,我们先生成一个μ=0.5,σ=0.2的高斯数据,并赋予他一个噪声

    def func_gaosi(x, miu, sigma):
        return 1/np.sqrt(2*np.pi)/sigma*np.exp(-(x-miu)**2/2/sigma**2)
      
    x = np.linspace(0, 1, 100)
    y = func_gaosi(x, 0.5, 0.2)
    y += np.random.normal(0., 0.02, x.shape)
    plt.plot(x, y)
    plt.xlabel('x')
    plt.ylabel('y')
    

    结果如下:在这里插入图片描述

    1. 使用astropy进行高斯拟合

    g_init = models.Gaussian1D(amplitude=1., mean=0, stddev=1.)
    fit_g = fitting.LevMarLSQFitter()
    g = fit_g(g_init, x, y)
    

    amplitude表示振幅的初值,振幅也就是高斯分布的系数,mean表示μ的初值,stddev表示σ的初值,g就是拟合结果,通过如下命令查看拟合的μ和σ

    print(g.mean.value, g.stddev.value)
    >>>>0.5007101792640887 0.20002191014593193
    

    可以看到是很精确的,而且也不需要自己写高斯分布的函数

    展开全文
  • http://txt.do/dooxv And here's my current code: import numpy as np import matplotlib.pyplot as plt import scipy.optimize as opt from scipy.interpolate import interp1d RGAdata = np.loadtxt("/Users/...

    I would like to fit multiple Gaussian curves to Mass spectrometry data in Python. Right now I'm fitting the data one Gaussian at a time -- literally one range at a time.

    Is there a more streamlined way to do this? Is there a way I can run the data through a loop to plot a Gaussian at each peak? I'm guessing there's gotta be a better way, but I've combed through the internet.

    My graph for two Gaussians is shown below.

    zYW6y.png

    My example data can be found at: http://txt.do/dooxv

    And here's my current code:

    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()

    解决方案

    You may find the lmfit module (https://lmfit.github.io/lmfit-py/) helpful. This provides a pre-built GaussianModel class for fitting a peak to a single Gaussian and supports adding multiple Models (not necessarily Gaussians, but also other peak models and other functions that might be useful for backgrounds and so for) into a composite model that can be fit at once.

    Lmfit supports fixing or giving a range to some Parameters, so that you could build a model as a sum of Gaussians with fixed positions, limiting the value for the centroid to vary with some range (so the peaks cannot get confused). In addition, you can impose simple mathematical constraints on parameter values, so that you might require that all peak widths are the same size (or related in some simple form).

    For peak finding, I've found scipy.signal.find_peaks_cwt to be pretty good.

    展开全文
  • matplotlib-柱状图+拟合线

    千次阅读 2019-10-19 16:06:13
    柱状图 + 拟合曲线 displot kde: 是否显示核密度估计图,默认显示,设置False不显示 kde=False, rug: 默认为False不显示,设置为True 显示观测的小细条(边际毛毯) hist: 设置是否显示条形图 ,为False不会 shade: ...
  • Exercise 11.1 这个十分简单, plot霸王硬上弓即可. ... 2].... matplotlib.pyplot ...输出如下, 个人感觉其实有些欠拟合了. 参考资料 Using the Gaussian Kernel Density Estimation
  • 高斯曲线拟合

    万次阅读 2018-12-27 21:25:36
    高斯拟合(Gaussian Fitting)即使用形如: Gi(x)=Ai*exp((x-Bi)2/Ci2) 的高斯函数对数据点集进行函数逼近的拟合方法。 其实可以跟多项式拟合类比起来,不同的是多项式拟合是用幂函数系, 而高斯拟合是用高斯函数系。 ...
  • 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
  • 首先这是一个我已经设置的赋值所以我只是在指针之后,我只能使用以下库... 我正在研究高斯拟合,并尝试按照前一个问题中的代码作为我自己的代码的基础 . (Gaussian fit for Python)from numpy import *from matplot...
  • Here's how you might do it: import numpy as np import matplotlib.pyplot as plt from scipy import optimize data = np.genfromtxt('data.txt') def gaussian(x, height, center, width, offset): return ...
  • 高斯分布拟合

    千次阅读 2018-09-25 12:57:01
    题目: 产生N个服从高斯分布的随机数,计算这些随机数的均值和...import matplotlib.pyplot as plt import scipy.stats as sta import numpy as np mu_True = 5 #设置高斯分布的均值mu sigma_True = 2 #设置高斯...
  • Python实现高斯曲线拟合

    千次阅读 2021-03-17 15:43:11
    针对光谱离散数据,寻峰完成后截取near峰值的数据,利用高斯拟合重绘单峰曲线,进而实现分峰功能 2.原理 3.代码 import numpy as np from math import log, exp import matplotlib.pyplot as plt from scipy....
  • Here's how you might do it: import numpy as np import matplotlib.pyplot as plt from scipy import optimize data = np.genfromtxt('data.txt') def gaussian(x, height, center, width, offset): return ...
  • python:拟合高斯模型

    万次阅读 多人点赞 2019-12-21 18:30:52
    注意本篇讲的是如何用一堆离散数据点拟合高斯模型,而非已知一堆数据点对求解高斯函数。 拟合高斯模型(正态分布) 若你有一堆离散数据点,想拟合出其高斯分布。实际上只需要求其均值和标准差。 为了好看一点...
  • 我的理解是,你的二维矩阵是个 histogram. 里面都是 int 对吧?这样的话,方法也许不唯一。但我提供一个从 histogram 里 recover data ...import matplotlib.pyplot as pltimport numpy as npfrom scipy.stats impo...
  • 首先,还是看看matplotlib中hist函数的语法 hist( x, bins=None, range=None, normed=False, # 超重要 density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', rwidth=None...
  • 我试图使用Python获得数据的双高斯分布(link)....我尝试使用以下代码(source):from sklearn import mixtureimport matplotlib.pyplotimport matplotlib.mlabimport numpy as npfrom pylab import *data = ...
  • 我有一个暗图像(原始格式),并绘制图像的图像和分布 ....我的高斯拟合永远不会接近它应该是什么 . 将图像转换为正确的图形格式或者出现其他问题时,我做错了吗?这是我用来生成此数据的当前代码:i...
  • 我没有探讨结果对这些初始值有敏感. 我做了两个估计.在第一个中,我让delta为一个自由参数,在第二个中,我将delta固定为900. 下面的脚本生成以下图: 这是脚本: from __future__ import division from scipy.stats ...
  • 我有一些可以包含0和n高斯形状的嘈杂数据,我正在尝试实现一种算法,该算法采用最高数据点并按照以下“方案”拟合高斯数据:新尝试,步骤:通过所有数据点拟合样条曲线得到样条函数的一阶导数得到两个数据点(左/右)...
  • python怎样做高斯拟合

    2020-11-29 00:32:34
    展开全部需要2113载入numpy和scipy库,若需要做可视化还需要matplotlib(附加5261dateutil, pytz, pyparsing, cycler, setuptools库)。不画图就只4102要前两个。如果1653没有这些库的话去 http://www.lfd.uci.edu/~...
  • 在这里,我定义了一个函数,用于返回任意数量的高斯分布之和:import numpyfrom numpy import *import matplotlib.pyplot as pltfrom scipy.optimize import curve_fitdef GaussSum(x,*p):n=len(p)/3A=p[:n]w=p[n:2*n]...
  • 一个输入的高斯函数数字阵列)但不管怎样,它都返回一个标量输出。曲线拟合函数则无法找到良好的最佳拟合。在为了澄清到底发生了什么,在使用numpy(或任何外部库)时总是建议始终显式地使用命名空间,如以下工作版本所...
  • "red") plt.plot(f,h) plt.show() 解决方案 You can use fit from scipy.stats.norm as follows: import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt data = np.random.normal(loc=...
  • 如何在Python中拟合多高斯曲线到质谱数据?有没有更简化的方法来做到这一点?有没有办法通过循环运行数据来在每个峰值处绘制高斯?我猜想有一个更好的方法,但我已经梳理了互联网。我的两个高斯图如下所示。 下面...
  • 这个代码适用于我,只要你只适合两个高斯分布的组合的函数.我刚刚做出了一个残差函数,增加了两个高斯函数,然后从真实数据中减去它们.我传递给Numpy最小二乘函数的参数(p)包括:第一个高斯函数(m)的平均值,与第一和第...
  • 我已经加载了一组数据到Python...拟合高斯和洛伦兹到Python中的数据我是编程新手,所以任何帮助将不胜感激!这是我的代码:import numpy as npimport matplotlib.pyplot as pltimport pylab as pfrom scipy.optimize...
  • 下面的代码模拟添加了线性背景的高斯峰,并说明如何使用lmfit提取参数。 后者具有许多其他内置模型(Lorentzian,Voight等),可以轻松地相互组合。import numpy as npfrom lmfit.models import Model, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,072
精华内容 2,028
关键字:

matplotlib多高斯拟合