Python、Pandas:如何更改 DataFrame.plt.density() 的带宽选择?
Python, Pandas: How to change the bandwidth selection for DataFrame.plt.density()?
我有一些数据已放入 pandas
dataframe
,并且我绘制了特定 column
的唯一值计数的条形图。
我想控制 Pandas 内置 df.plot.density()
的带宽
函数,绘制数据上的 kde。这可能吗,还是我最好使用 Sklearn、Scipy 或其他东西?
谢谢
如果你想控制带宽,我建议使用 seaborn 的 kdeplot(参见 link)——即 bw 参数
正如@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()
这returns下面的情节进行比较:
我有一些数据已放入 pandas
dataframe
,并且我绘制了特定 column
的唯一值计数的条形图。
我想控制 Pandas 内置 df.plot.density()
函数,绘制数据上的 kde。这可能吗,还是我最好使用 Sklearn、Scipy 或其他东西?
谢谢
如果你想控制带宽,我建议使用 seaborn 的 kdeplot(参见 link)——即 bw 参数
正如@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()
这returns下面的情节进行比较: