在Python的Pandas/Matplotlib中对直方图和密度图进行叠加

5
我有一个名为clean的Pandas数据框,其中包含一列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)

enter image description here

但是当我尝试叠加时,y轴刻度值和标签不匹配:
yhist, xhist, _hist = plt.hist(clean['v'],bins=40, range=(0, Maxv), color='g')
plt.ylabel("Number")

ax=clean['v'].plot(kind='density') #I would like to insert here a normalization to max(yhist)/max(ax)
ax.set_xlim(0, Maxv)
plt.xlabel("Orbital velocity (km/s)")
ax.get_yaxis().set_visible(False)

enter image description here

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


1
这个答案应该会有所帮助:https://dev59.com/RFkS5IYBdhLWcg3wXFg9#39987117 - piRSquared
我试过这个:ax = clean.v.plot(kind='hist', bins=40, range=(0, Maxv)) clean.v.plot(kind='kde', ax=ax, secondary_y=True)但是range部分不起作用,还有左侧y轴的问题。 - Matt
1
@Matt 没有数据很难说,但是没错,seaborn的目的就是让困难的事情变得容易 ;) - IanS
1
@IanS,我正在看你的Seaborn链接,这也可能是一个非常好的选择。谢谢! - Matt
1
Seaborn有一个顶级函数可以完美地实现这一点:http://seaborn.pydata.org/examples/distplot_options.html - Paul H
显示剩余4条评论
3个回答

5
根据您的代码,以下内容应该可以正常工作:

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])

您可能不再需要secondary_y了。


非常干净。我实际上已经摆脱了 secondary_y。唯一的问题是,我在 y 中失去了真正的计数(来自 hist),现在已经被归一化了,但我想这也没关系。 - Matt

1
Seaborn使这变得容易。
import seaborn as sns
sns.distplot(df['numeric_column'],bins=25)

enter image description here


确实非常正确。当我提出这个问题时,我还是一个非常初学者。Seaborn非常有用! :) - Matt

1

我尝试这个:

ax = clean.v.plot(kind='hist', bins=40, range=(0, Maxv))
clean.v.plot(kind='kde', ax=ax, secondary_y=True)

但是范围部分不起作用,还有左侧y轴的问题。

enter image description here


1
尝试在绘图后设置范围:ax.set(xlim=[0, Maxv]) - IanS
对于左侧Y轴,请参见此答案 - IanS
@IanS:非常感谢,它适用于范围。 :) 不过,我还没有成功处理y轴,但我想这不太重要。 - Matt
是的,它确实做到了(我已经回答了你的问题 :)),但正如我所说的,我丢失了y中对象的真实直方图计数。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接