我可能犯了一个愚蠢的错误,但重现方法如下:
import seaborn as sns
from scipy.stats import lognorm
import numpy as np
mu = 25
samples = lognorm.rvs(s=1, loc=0, scale=np.log(mu), size=10000)
shape, loc, scale = lognorm.fit(samples)
print(shape, loc, scale)
fig, ax = plt.subplots()
sns.histplot(samples, bins=50, stat="density", log_scale=True, ax=ax)
xs = np.linspace(0.1, 100, 10000)
ys = lognorm.pdf(xs, s=shape, loc=loc, scale=scale)
ax.plot(xs, ys, "r-")
我不认为问题出在
scipy.stats
。用 matplotlib
绘图,我看到很好的一致性:
from scipy.stats import lognorm
import numpy as np
import matplotlib.pyplot as plt
mu = 25
samples = lognorm.rvs(s=1, loc=0, scale=np.log(mu), size=10000)
shape, loc, scale = lognorm.fit(samples)
fig, ax = plt.subplots()
ax.set_xscale('log')
bins = np.logspace(-2, 2)
ax.hist(samples, bins=bins, density=True)
xs = np.logspace(-2, 2, 10000)
ys = lognorm.pdf(xs, s=shape, loc=loc, scale=scale)
ax.plot(xs, ys, "r-")