[英]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.