Python中Pandas/Matplotlib中直方图和密度的叠加

Python中Pandas/Matplotlib中直方图和密度的叠加,python,pandas,matplotlib,histogram,seaborn,Python,Pandas,Matplotlib,Histogram,Seaborn,我有一个名为clean的熊猫数据框,其中包含一列v,我想为它绘制一个直方图并叠加一个密度图。我知道我可以用这种方式画一个在另一个下面: import pandas as pd import matplotlib.pyplot as plt Maxv=200 plt.subplot(211) plt.hist(clean['v'],bins=40, range=(0, Maxv), color='g') plt.ylabel("Number") plt.subplot(212) ax=cle

我有一个名为
clean
的熊猫数据框,其中包含一列
v
,我想为它绘制一个直方图并叠加一个密度图。我知道我可以用这种方式画一个在另一个下面:

import pandas as pd
import matplotlib.pyplot as plt

Maxv=200

plt.subplot(211)
plt.hist(clean['v'],bins=40, range=(0, Maxv), color='g')
plt.ylabel("Number")

plt.subplot(212)
ax=clean['v'].plot(kind='density')
ax.set_xlim(0, Maxv)
plt.xlabel("Orbital velocity (km/s)")
ax.get_yaxis().set_visible(False)

但当我尝试叠加时,y比例不匹配(并且我松开了y轴标记和标签):

有什么提示吗?(附加问题:如何更改密度平滑的宽度?

不,我尝试以下方法:

ax = clean.v.plot(kind='hist', bins=40, range=(0, Maxv))
clean.v.plot(kind='kde', ax=ax, secondary_y=True)
但是范围部分不起作用,还有左y轴的问题


根据您的代码,这应该可以:

ax = clean.v.plot(kind='hist', bins=40, normed=True)
clean.v.plot(kind='kde', ax=ax, secondary_y=True)
ax.set(xlim=[0, Maxv])

您甚至可能不再需要辅助功能了。

Seaborn使这变得简单

import seaborn as sns
sns.distplot(df['numeric_column'],bins=25)

是的,谢谢。我只需要找到设置x范围大小和隐藏第二个y轴的方法。。。谢谢大家!@马特没有数据很难说,但没错,seaborn的本意是让困难的事情变得容易;)@伊安,我在看你的seaborn lik,它可能也是一个很好的选择。谢谢Seaborn有一个顶级函数,它可以做到这一点:在打印后尝试设置范围:
ax.set(xlim=[0,Maxv])
对于左y轴,请参见。@IanS:非常感谢,它适用于范围。:)虽然我没有成功使用y轴,但我想它不那么重要。是的(我回答了你的答案:),但正如我所说的,我丢失了y轴中对象的真实直方图计数。非常干净。实际上,我已经摆脱了
secondary\y
。唯一的问题是我丢失了y中的真实计数(来自hist),现在已经标准化了,但我想这也没问题。确实是这样。当我问这个问题时,我是个新手。Seaborn非常有用!:)
import seaborn as sns
sns.distplot(df['numeric_column'],bins=25)