Matplotlib 是否有方法将法线曲线拟合到点?

Matplotlib 是否有方法将法线曲线拟合到点?,matplotlib,statistics,curve-fitting,Matplotlib,Statistics,Curve Fitting,作为一个小项目,我已经做了一个程序,掷骰子的次数是nt。每次掷骰子时,它将骰子的结果相加,并将其添加到列表中。最后用matplot表示数据 import random from collections import Counter import matplotlib.pyplot as plt nd = int(input("Insert number of dice: ")) nt = int(input("Insert number of throws: &

作为一个小项目,我已经做了一个程序,掷骰子的次数是nt。每次掷骰子时,它将骰子的结果相加,并将其添加到列表中。最后用matplot表示数据

import random
from collections import Counter
import matplotlib.pyplot as plt

nd = int(input("Insert number of dice: ")) 
nt = int(input("Insert number of throws: "))
print(nd, " dice thrown ", nt, " times")
print("Generating sums, please hold....")
c = 0
i = 0
sum = 0
sums = []
while nt >= i :
    while nd >= c:
        g = random.randint(1, 6)
        sum = sum + g
        c += 1
    sums.append(sum)
    i = i+1
    c=0
    sum = 0
    print("Throw ", i, " of ", nt)
sums.sort()
max = max(sums)
min = min(sums)
print("||Maximum result: ", max, " ||Minimum result: ", min)

print("Now ordering results")

f = Counter(sums)
y = list(f.values())
x = list(f.keys())
print("Rappresenting results")

plt.plot(x, y)
plt.xlabel("Risultati")
plt.ylabel("Frequenza")
plt.title("Distribuzione delle somme")
plt.grid(True)
plt.tight_layout()
plt.show()
结果图如下所示:


我想知道如何将高斯曲线拟合到点,以便使图形更清晰

总和的平均值和标准偏差是高斯正态分布所需的参数。发行版的pdf区域为
1
。要将其缩放到与直方图相同的大小,需要将其与输入值的数量相乘(
len(sums)

将代码转换为与numpy阵列一起使用,使一切都变得更快:

将numpy导入为np
从收款进口柜台
将matplotlib.pyplot作为plt导入
从scipy.stats导入norm
nd=10000#int(输入(“插入骰子数:))
nt=10000#int(输入(“插入抛出次数:”)
打印(nd,“掷骰子”,nt,“时报”)
打印(“生成总额,请稍候…”)
总和=np.zero(nt,dtype=np.int)
对于范围内的i(nt):
和[i]=np.sum(np.random.randint(1,7,nd))
sums.sort()
xmax=sums.max()
xmin=sums.min()
打印(“| |最大结果:,xmax,| |最小结果:,xmin)
打印(“现在订购结果”)
f=计数器(总和)
y=列表(f.值())
x=列表(f.键())
打印(“打印结果”)
平面图(x,y)
平均值=总和。平均值()
std=总和。std()
xs=np.arange(xmin,xmax+1)
plt.绘图(xs,norm.pdf(xs,平均值,标准)*len(总和),颜色为红色,alpha=0.7,lw=3)
利润率(x=0)
plt.xlim(xmin,xmax)
plt.ylim(ymin=0)
plt.紧_布局()
plt.show()

PS:这里有一些代码添加到问题代码中,仅使用numpy计算平均值和标准偏差。(请注意,当您使用
sum
作为变量名时,尝试使用Python的
sum()
函数时会出现错误。因此,强烈建议避免命名变量,如
sum
max

def(x):
返回标准.pdf(x,平均值,标准)*len(总和)
平均值=np.平均值(总和)
标准=np.标准(总和)
xs=范围(xmin,xmax+1)
ys=[f(x)表示x中的x]
plt.绘图(xs,ys,颜色为红色,lw=3)

总和的平均值和标准偏差是高斯正态分布所需的参数。发行版的pdf区域为
1
。要将其缩放到与直方图相同的大小,需要将其与输入值的数量相乘(
len(sums)

将代码转换为与numpy阵列一起使用,使一切都变得更快:

将numpy导入为np
从收款进口柜台
将matplotlib.pyplot作为plt导入
从scipy.stats导入norm
nd=10000#int(输入(“插入骰子数:))
nt=10000#int(输入(“插入抛出次数:”)
打印(nd,“掷骰子”,nt,“时报”)
打印(“生成总额,请稍候…”)
总和=np.zero(nt,dtype=np.int)
对于范围内的i(nt):
和[i]=np.sum(np.random.randint(1,7,nd))
sums.sort()
xmax=sums.max()
xmin=sums.min()
打印(“| |最大结果:,xmax,| |最小结果:,xmin)
打印(“现在订购结果”)
f=计数器(总和)
y=列表(f.值())
x=列表(f.键())
打印(“打印结果”)
平面图(x,y)
平均值=总和。平均值()
std=总和。std()
xs=np.arange(xmin,xmax+1)
plt.绘图(xs,norm.pdf(xs,平均值,标准)*len(总和),颜色为红色,alpha=0.7,lw=3)
利润率(x=0)
plt.xlim(xmin,xmax)
plt.ylim(ymin=0)
plt.紧_布局()
plt.show()

PS:这里有一些代码添加到问题代码中,仅使用numpy计算平均值和标准偏差。(请注意,当您使用
sum
作为变量名时,尝试使用Python的
sum()
函数时会出现错误。因此,强烈建议避免命名变量,如
sum
max

def(x):
返回标准.pdf(x,平均值,标准)*len(总和)
平均值=np.平均值(总和)
标准=np.标准(总和)
xs=范围(xmin,xmax+1)
ys=[f(x)表示x中的x]
plt.绘图(xs,ys,颜色为红色,lw=3)

好吧,如果你计算结果的平均值和标准偏差,然后根据定义定义最佳拟合高斯曲线。你需要缩放垂直轴,使两条曲线对齐——基本上你需要确保经验曲线下的面积为1。好吧,如果你计算结果的平均值和标准偏差,然后根据定义定义最佳拟合高斯曲线。您需要缩放垂直轴以使两条曲线对齐——基本上您需要确保经验曲线下的面积为1。感谢您的建议,但我不清楚xs变量的用途。
xs
是创建x轴上有
xs
f(xs)的曲线所需的x值数组
位于y轴上(其中
f()
是所需的高斯法线)。这是使用matplotlib和numpy打印函数的标准方法。如果没有numpy,您将使用类似于
xs=range(xmin,xmax+1)
ys=[f(x)表示xs中的x]
。如果这回答了您的问题,您可能会考虑投票和/或标记答案。谢谢您的建议,但我不清楚XS变量是什么。<代码> xs>代码>是x轴上创建一个x值的数组,需要在x轴上创建代码:<代码> f(xs)< /> > y轴(其中<代码> f>(<)/代码>是期望的高斯常态)。这是使用matplotlib和numpy打印函数的标准方法。如果没有NUMPY,你会使用诸如<代码> xs=范围(xmin,xMAX + 1)和<代码> ys= [f(x),用于xs[xs] < /代码>。如果这回答了你的问题,你可以考虑将投票和/或标记为答案。