[英]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.