简体   繁体   English

对绘制在直方图中的给定数据进行归一化威布尔分布

[英]normalising weibull distribution for a given data plotted in histogram

I am trying to replicate this graph https://wind-data.ch/tools/weibull.php我正在尝试复制此图https://wind-data.ch/tools/weibull.php

The code I worked on, is我工作的代码是

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab
import math
import scipy.stats as stats
from scipy.stats import dweibull
import pandas as pd
import seaborn as sns

frequency =     [2.75,7.80,11.64,13.79,14.20,13.15,
11.14,8.72,6.34,4.30,2.73,1.62,0.91,0.48,
0.24,0.11,0.05,0.02,0.01,0.00]
k = 2.00
lambd =6.00
mu = 0
dist = dweibull(k,mu,lambd)
x = np.linspace(-20,20, 1000)

sns.set_style('darkgrid')
sns.distplot(frequency, fit=stats.dist.pdf(x), kde=False)
sns.show()

I think I might had some logical error, need help in correcting it (I am totally new to this stuff)我想我可能有一些逻辑错误,需要帮助纠正它(我对这个东西完全陌生)

Initially, I tried matplotlib as:最初,我尝试 matplotlib 为:

plt.plot(x, 210 * dist.pdf(x),label=r'$k=%.1f,\ \ lambd=%i$' % (k,   lambd))
plt.xlim(0, 21)
plt.ylim(0, 15.0)
plt.hist(frequency,bins ='auto')
plt.show()

(instead of last three lines in prior code, didn't worked out) (而不是之前代码中的最后三行,没有解决)

Not completely sure iiuc, but this would be my first approach:不完全确定 iiuc,但这将是我的第一种方法:

import matplotlib.pyplot as plt
import numpy as np

def wd(x, k, A):
    return k/A*(x/A)**(k-1) * np.exp(-(x/A)**k)

frequency = [2.75, 7.80, 11.64, 13.79, 14.20, 13.15, 11.14, 8.72, 6.34, 4.30, 2.73, 1.62, 0.91, 0.48, 0.24, 0.11, 0.05, 0.02, 0.01, 0.00]
k = 2.00
lambd = 6.00

plt.figure(figsize=(8, 4))
plt.step(range(len(frequency)), frequency, where='post')
plt.plot(wd(np.arange(len(frequency)), k, lambd)*100)

creates创造

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM