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

Posted

技术标签:

【中文标题】Python中Pandas/Matplotlib中直方图和密度的叠加【英文标题】:Superimposition of histogram and density in Pandas/Matplotlib in Python 【发布时间】:2017-05-19 19:12:34 【问题描述】:

我有一个名为 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)

但是当我尝试叠加时,y 刻度不匹配(并且我失去了 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)

一些提示? (补充问题:如何改变密度平滑的宽度?)

【问题讨论】:

this answer should help 是的,谢谢。我只需要设法设置 x 范围大小并隐藏第二个 y 轴...谢谢! @Matt 没有数据很难说,但是是的,seaborn 旨在让困难的事情变得简单;) @IanS 我在看你的 seaborn 喜欢,它也可能是一个很好的选择。谢谢! Seaborn 有一个***函数可以做到这一点:seaborn.pydata.org/examples/distplot_options.html 【参考方案1】:

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

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),现在已标准化,但我想这也很好。【参考方案2】:

不,我试试这个:

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

但是范围部分不行,还有左边y轴的问题

【讨论】:

绘制后尝试设置范围:ax.set(xlim=[0, Maxv]) 左侧y轴见this answer。 @IanS:非常感谢,它适用于该范围。 :) 不过,我还没有成功使用 y 轴,但我想它不太重要。 是的(我已经回答了你的答案:)),但正如我所说,我已经丢失了 y 中对象的真实直方图计数。【参考方案3】:

Seaborn 让这一切变得简单

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

【讨论】:

确实如此。当我问这个问题时,我是非常初学者。 Seaborn 非常好用! :)

以上是关于Python中Pandas/Matplotlib中直方图和密度的叠加的主要内容,如果未能解决你的问题,请参考以下文章

Python+pandas+matplotlib数据分析与可视化案例

Python——数据分析,Numpy,Pandas,matplotlib

使用 pandas/matplotlib/python,我无法将我的 csv 文件可视化为集群

Python pandas / matplotlib在条形图列上方注释标签[重复]

高端实战 Python数据分析与机器学习实战 Numpy/Pandas/Matplotlib等常用库

Numpy,Pandas,Matplotlib