нормализация распределения Вейбулла для заданных данных, нанесенных на гистограмму - PullRequest
0 голосов
/ 30 января 2019

пытается воспроизвести этот график https://wind -data.ch / tools / weibull.php код, над которым я работал, выглядит так: -

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

Я думаю, что могкакая-то логическая ошибка, нужна помощь в ее исправлении (совершенно новый для этого материала)

изначально пробовал 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()

(вместо трех последних строк в предыдущем коде, не работалвыход)

1 Ответ

0 голосов
/ 30 января 2019

Не совсем уверен, 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)

создает

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...