【问题标题】:Python, Pandas: How to change the bandwidth selection for DataFrame.plt.density()?Python,Pandas:如何更改 DataFrame.plt.density() 的带宽选择?
【发布时间】:2018-10-04 22:59:53
【问题描述】:

我有一些数据已放入pandasdataframe,并绘制了特定column 的唯一值计数的条形图。

我想控制 Pandas 内置 df.plot.density() 的带宽

函数,在数据上绘制 kde。这可能吗,还是我最好使用 Sklearn、Scipy 或其他东西?

谢谢

【问题讨论】:

  • 您能否提供一些示例数据,以及您想要的结果与您现在得到的结果进行比较?

标签: python pandas dataframe kernel-density


【解决方案1】:

正如@Jan 所指出的,您可以为此使用seaborn,在kde 图上控制带宽非常容易。下面是一个随机正态数据的例子:

import seaborn as sns

d = pd.DataFrame({'x':np.random.choice(['a','b','c'], 100), 'y':np.random.randn(100)})

fig, axes = plt.subplots(1,3)
for name,g in d.groupby('x'):
    g['y'].plot.density(ax=axes[0], label=name)
    sns.kdeplot(g['y'], bw=0.25, ax=axes[1], label=name)
    sns.kdeplot(g['y'], bw=0.75, ax=axes[2], label=name)

axes[0].set_title('pandas plot.density', fontsize='12')
axes[1].set_title('seaborn kde with \n 0.25 bandwidth', fontsize='12')
axes[2].set_title('seaborn kde with \n 0.75 bandwidth', fontsize='12')

plt.legend()

这将返回以下要比较的图:

【讨论】:

  • 感谢您的帮助,我试图避免使用 seaborn 并使用 sklearn 实现它,但我明白为什么不需要太多的体力劳动。
【解决方案2】:

如果你想控制带宽,我建议使用 seaborn 的 kdeplot(参见 link)——即 bw 参数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    相关资源
    最近更新 更多