matplotlib 将KDE添加到直方图

6bc51xsx  于 2023-05-29  发布在  其他
关注(0)|答案(3)|浏览(148)

我想在直方图中添加一个密度图。我知道一些关于pdf的功能,但我感到困惑,其他类似的问题没有帮助。

from scipy.stats import * 
from numpy import*
from matplotlib.pyplot import*
from random import*

nums = []
N = 100
for i in range(N):
    a = randint(0,9)
    nums.append(a)

bars= [0,1,2,3,4,5,6,7,8,9]
alpha, loc, beta=5, 100, 22

hist(nums,normed= True,bins = bars)

show()

我在找像这样的东西

4bbkushb

4bbkushb1#

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(41)

N = 100
x = np.random.randint(0, 9, N)
bins = np.arange(10)

kde = stats.gaussian_kde(x)
xx = np.linspace(0, 9, 1000)
fig, ax = plt.subplots(figsize=(8,6))
ax.hist(x, density=True, bins=bins, alpha=0.3)
ax.plot(xx, kde(xx))

8yparm6h

8yparm6h2#

以下是使用seaborn 0.11.1和pandas 1.1.5的解决方案:

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import numpy as np

N = 100
nums = [np.random.randint(i-i, 9) for i in range(N)]
df = pd.DataFrame(nums, columns=["value"])

fig, ax1 = plt.subplots()
sns.kdeplot(data=df, x="value", ax=ax1)
ax1.set_xlim((df["value"].min(), df["value"].max()))
ax2 = ax1.twinx()
sns.histplot(data=df, x="value", discrete=True, ax=ax2)

注意我是如何使用numpy生成随机值的,因为我需要的是实际值,而不是生成器。最后一行中的discrete=True确保刻度居中。

ru9i0ody

ru9i0ody3#

来自Seaborndistplot同时提供直方图和分布图:

sns.distplot(df)

相关问题