簡體   English   中英

如何在seaborn中繪制離散變量的分布圖

[英]How to draw distribution plot for discrete variables in seaborn

當我為離散變量繪制displot時,分布可能不像我想的那樣。 例如。

在此處輸入圖像描述 我們可以發現kdeplot中有裂縫,因此barplot中的曲線在 y 軸上“較低”。

在我的工作中,情況更糟: 在此處輸入圖像描述

我認為這可能是因為每個條的“寬度”或“重量”不是 1。 但我沒有找到任何可以證明這一點的參數。

我想畫這樣的曲線(應該更平滑) 在此處輸入圖像描述

解決此問題的一種方法可能是調整KDE的“帶寬”( 請參閱seaborn.kdeplot()的文檔

n = np.round(np.random.normal(5,2,size=(10000,)))
sns.distplot(n, kde_kws={'bw':1})

在此輸入圖像描述

編輯這是一個不同規模的條形和KDE的替代方案

n = np.round(np.random.normal(5,2,size=(10000,)))
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

sns.distplot(n, kde=False, ax=ax1)
sns.distplot(n, hist=False, ax=ax2, kde_kws={'bw':1})

在此輸入圖像描述

如果問題是直方圖中有一些空箱,那么指定與數據匹配的箱可能是有意義的。 在這種情況下,使用bins=np.arange(0,16)來獲取數據中所有整數的bin。

import numpy as np; np.random.seed(1)
import matplotlib.pyplot as plt
import seaborn as sns

n = np.random.randint(0,15,10000)
sns.distplot(n, bins=np.arange(0,16), hist_kws=dict(ec="k"))

plt.show()

在此輸入圖像描述

我不是 seaborn 的專家,但據我所知,sns.distplot(或 displot)是用於繪制直方圖而不是條形圖。 直方圖和 KDE(它是概率密度函數的近似值)都只對連續隨機變量有意義。 因此,在您的情況下,當您想繪制離散隨機變量的分布時,您必須使用條形圖並繪制概率質量函數 ( PMF )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM