直方图曲线拟合及函数形式提取-Python

直方图曲线拟合及函数形式提取-Python,python,function,histogram,Python,Function,Histogram,如果我已经使用matplotlib在python中绘制了一个直方图,那么我如何能够轻松地提取直方图的函数形式,或者我想,提取直方图的最佳拟合曲线的函数。我不知道如何绘制这条最佳拟合曲线。谢谢你的帮助 我的柱状图的形状像是一个倒转的lennard-jones势。为了彻底地回答这两个问题,我将回答这两个问题。这是两个独立的问题:将函数拟合到直方图数据,然后绘制函数。首先,scipy有一个适合您的功能的工具。其中可能是最简单的 举个例子, from scipy.optimize import curv

如果我已经使用matplotlib在python中绘制了一个直方图,那么我如何能够轻松地提取直方图的函数形式,或者我想,提取直方图的最佳拟合曲线的函数。我不知道如何绘制这条最佳拟合曲线。谢谢你的帮助


我的柱状图的形状像是一个倒转的lennard-jones势。

为了彻底地回答这两个问题,我将回答这两个问题。这是两个独立的问题:将函数拟合到直方图数据,然后绘制函数。首先,scipy有一个适合您的功能的工具。其中可能是最简单的

举个例子,

from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt

# Model function
def f(x, a, b):
    return a * x + b

# Example data
x = np.linspace(0, 10, 20)
y = f(x, 0.2, 3.4) + 0.2 * np.random.normal(size=len(x))

# Do the fit
popt, pcov = curve_fit(f, x, y, [1.0, 1.0])
curve\u fit
中,您可以获得函数
f
的优化参数
a、b
和统计协方差。您还可以将统计权重的误差作为
sigma
传递给它

现在您可以绘制数据和直方图。我想对于曲线,在
x
中使用更高的分辨率是有意义的

# Plot data
plt.plot(x, y, 'o')

# Plot fit curve
fit_x = np.linspace(0, 10, 200)
plt.plot(fit_x, f(fit_x, *popt))
plt.show()

我在这里没有专门讨论柱状图或Lennard Jones势,以限制代码的复杂性并关注您所问的部分。但是这个例子可以适用于任何类型的最小二乘优化问题。

这实际上不是Python特有的问题,甚至不是编程问题。你最好在中询问一个算法。你想知道如何拟合还是如何绘制结果,或者两者兼而有之?哦,是的。哇!我是个新手,所以我想可能会有一个matplotlib命令来绘制最佳拟合。无论如何谢谢你!我想一个更好的问题实际上是如何绘制数据集的最佳拟合曲线,在本例中是直方图!谢谢你的详细答复。当我手头有你的帮助时,我可以问你我如何使我的直方图适应输入x和y吗。目前,我的直方图仅由n,bin,patches=plt.hist定义(Vvec,num_bins,normed=1,facecolor='red',edgecolor=“none”,alpha=0.5)…其中Vvec是我的x轴输入,我如何从这个定义中提取我的x和y?不客气。事实上,自从从gnuplot切换到Python进行交互式数据分析以来,我曾多次偶然发现这一点,所以我认为这一次值得写下来。等一下…好的,基本上是y->n和x->bin。但这并不是那么简单,因为箱子比n大1个元素。因此,您必须提取相关数据,这些数据可能是存储箱的左侧(
存储箱[:-1]
),右侧(
存储箱[1:]
),中心(
(存储箱[:-1]+存储箱[1:])/2
)或其他位置。取决于你想如何建模。太棒了,这就是我需要知道的,让它工作起来。再次感谢你!