gpt4 book ai didi

python - 使用 python 绘制曲线而不是条形图

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:13 26 4
gpt4 key购买 nike

我有一个数据框df,我用它在同一x轴上生成两个条形图。我不想将这些值显示为条形图,而是想要一条适合条形形状的曲线。 IE。它应该有点像高斯或正态分布拟合,但我想保持 x 轴和 y 轴相同,而不显示频率。我还需要从 0 开始拟合任何负值。我怎样才能做到这一点?我想 scipy curve_fit 函数可能有用,或者 sns.distplot

df
size a b
0 0.000000 6.20405
1 0.000000 9.262046
2 2.51524 14.28944
3 6.750392 12.756672
4 9.893210 9.733124
5 10.302983 6.690388
6 11.302383 4.86942
7 8.024279 8.32051
8 4.39434 7.228450
9 2.05516 3.767661

x = df['a']
y = df['b']

n = 10

fig, ax = plt.subplots(1)

bar_width = 0.4 # default: 0.8
bar_locations = np.arange(n)

ax.bar(bar_locations, x, bar_width)
ax.bar(bar_locations - bar_width, y, bar_width, color='r')

fig.show()

更新:

fig, ax = plt.subplots()
for a in [x, y]:
sns.distplot(a, bins=range(1, 25, 1), ax=ax, kde=True, fit=stats.gamma)

我如何清理这个数字,a) 强制 kde 拟合不适合任何负数(数据从 0 开始!)和 b) 删除黑线和绿/蓝条?

enter image description here

最佳答案

您应该只需要 sns.distplotkde=True 。这将核密度估计器显示为频率曲线。然而,由于比例差异,您的手动条形图会使曲线变得模糊,因此您应该将它们绘制在辅助 y 轴上,或者在需要时重新调整它们的比例。

或者,sns.kdeplot 仅绘制 KDE 曲线,而不绘制直方图条形。

更新

试试这个:

fig, ax = plt.subplots()
for a in [x, y]:
sns.distplot(
a, bins=range(1, 25, 1), ax=ax,
kde=True, hist=False, fit=None)

目前还不清楚您想要什么样的曲线,但请阅读 the docs对于distplotkde=True 添加 KDE 曲线,hist=True 添加条形图,fit=stats.gamma 拟合 Gamma 分布(显示为黑线) .

对于删除负值,曲线将延伸到负值区域,因为它与数据相拟合,而数据可能来自允许负值的分布。如果您正在寻找不同的拟合,请从 scipy.stats 中选择不同的分布(例如,处理严格正值的分布)。

关于python - 使用 python 绘制曲线而不是条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47625963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com