Python-hist,distplot bin宽度不一致问题的

2018-12-21  本文已影响0人  老_Z

python的hist有一个bug,之前一直没有解决。绘制直方图的时候,往往出现两组数据由于分布不一样,,导致出来的图片中,虽然是一样数目的bins,但是bin的宽窄不同。

而我想得到的是,,
虽然数据分布不同,我希望两组数据共享同样宽度的bin,希望每一个bin是一样的宽度
一方面,好看
另一方面,这样才对啊

如何解决呢?

直方图distplot

distplot(seaborn)是加强版的hist(pandas),都是做直方图
先来个示例代码:

from numpy.random import randn
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
a = np.random.rand(200)*50
b = np.random.rand(200)*100
fig, ax = plt.subplots()
sns.distplot(a, bins=10, ax=ax, kde=False, color="blue")
sns.distplot(b, bins=10, ax=ax, kde=False, color="red")
ax.set_xlim([-10,110])
image

很明显看得出上图中,虽然a和b的bins都指定为10,但是绘制在同一张图上的时候,python实际是使用每一组数据的最小值和最大值之间的范围除以bins,得到各自bins的范围。
解决方法:很简单:指定bin的宽度就可以了,可以用range传入,或者直接给出一个列表,range范围
划重点 ,注意这一点,只有这一点
bins=range(0,110,10)
把这个加入代码的bins中就可以了。

fig, ax = plt.subplots()
sns.distplot(a, bins=range(0,110,10), ax=ax, kde=False, color="blue")
sns.distplot(b, bins=range(0,110,10), ax=ax, kde=False, color="red")
ax.set_xlim([-10,110])
image

可以看出加上这个bins=range(0,110,10)的参数之后,得到了我们想看到的结果,bin的宽度完全一致了!

好,我们这次的小tip就分享完了,如果有帮助,希望可以点个赞赏哦,或者右边点个喜欢吧!

其实hist还有一个小bug,也是挺头疼的,,就是norm后,纵轴不是百分比,那么我想要百分比怎么做呢?下次再分享吧

上一篇 下一篇

猜你喜欢

热点阅读