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在条形图列上方注释标签[重复]