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

时间:2017-01-05 09:47:15

标签: python pandas matplotlib histogram seaborn

我有一个名为curplayer= &players[0]; void randomize_game(struct player players[],struct player* curplayer) { int p; time_t t; srand((unsigned) time(&t)); p = rand() % 2; if(p==0){ **curplayer= &players[0];** players[0].token_colour = CC_WHITE; players[1].token_colour = CC_RED; }else{ **curplayer= &players[1];** players[0].token_colour = CC_RED; players[1].token_colour = CC_WHITE; } 的Pandas数据帧,其中包含一列clean,我想绘制一个直方图并叠加密度图。我知道我可以通过这种方式在另一个之下绘制一个:

v

enter image description here

但是当我尝试叠加时,y刻度不匹配(我松开y轴刻度和标签):

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

一些提示? (附加问题:如何更改密度平滑的宽度?)

3 个答案:

答案 0 :(得分:4)

根据您的代码,这应该有效:

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

答案 1 :(得分: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

答案 2 :(得分:1)

Seaborn使这变得容易

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

enter image description here