python的hist有一個bug,之前一直沒有解決。繪制直方圖的時候,往往出現(xiàn)兩組數(shù)據(jù)由于分布不一樣,,導(dǎo)致出來的圖片中,雖然是一樣數(shù)目的bins,但是bin的寬窄不同。
而我想得到的是,,
雖然數(shù)據(jù)分布不同,我希望兩組數(shù)據(jù)共享同樣寬度的bin,希望每一個bin是一樣的寬度
一方面,好看
另一方面,這樣才對啊
如何解決呢?
-
直方圖使用distplot
distplot(seaborn)是加強(qiáng)版的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實際是使用每一組數(shù)據(jù)的最小值和最大值之間的范圍除以bins,得到各自bins的范圍。
-
解決方法:
很簡單:指定bin的寬度就可以了,可以用range傳入,或者直接給出一個列表,range范圍
劃重點 ,注意這一點,只有這一點
bins=range(0,110,10)
把這個加入代碼的bins中就可以了。
fig, ax = plt.subplots()
bins=range(0,110,10)
sns.distplot(a, bins, ax=ax, kde=False, color="blue")
sns.distplot(b, bins, ax=ax, kde=False, color="red")
ax.set_xlim([-10,110])
image
可以看出加上這個bins=range(0,110,10)的參數(shù)之后,得到了我們想看到的結(jié)果,bin的寬度完全一致了!
好,我們這次的小tip就分享完了,如果有幫助,希望可以點個贊賞哦,或者右邊點個喜歡吧!
其實hist還有一個小bug,也是挺頭疼的,,就是norm后,縱軸不是百分比,那么我想要百分比怎么做呢?下次再分享吧