[英]Pandas plot density plot from frequency table
假設我有一個看起來像這樣(簡化)的DataFrame
>>> df
freq
2 2
3 16
1 25
其中的index列代表一個值,而freq
列代表該值的出現頻率,如頻率表中所示。
我想為此表繪制一個密度圖,就像從圖類型kde
獲得的密度圖一樣。 但是,這種類型顯然僅適用於pd.Series
。 我的df
太大,無法展平為1D系列,即df = [2, 2, 3, 3, 3, ..,, 1, 1]
。 在這種情況下如何繪制密度圖?
我知道您已經問過df
太大而無法展平的情況,但是以下回答適用於這種情況:
pd.Series(df.index.repeat(df.freq)).plot.kde()
或更一般而言,當值位於名為val
而不是索引的列中時:
df.val.repeat(df.freq).plot.kde()
如果您通過總體大小的乘積對y值進行歸一化,則可以使用條形圖來繪制密度分布。 這將使條形圖覆蓋的面積等於1。
plt.bar(
df.index,
df.freq / df.freq.sum(),
width=-1,
align='edge'
)
width
和align
參數應確保每個條形都覆蓋間隔(k-1,k]。
了解統計信息的人應該回答內核密度估計對於離散分布是否真正有意義。
也許這可以工作:
import matplotlib.pyplot as plt
plt.plot(df.index, df['freq'])
plt.show()
Seaborn是在Matplotlib之上執行此操作的,並且可以根據需要自動計算內核密度估計值。
import seaborn as sns
x = pd.Series(np.random.randint(0, 20, size = 10000), name = 'freq')
sns.distplot(x, kde = True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.