1.直方图简介
直方图和柱状图虽然外形非常相似,但是实际意义差别非常大。直方图是用来描述数据分布的统计报告图,体现了数据分布在某个区间或者取得某个值的频数或频率,如果在统计数据时将区间划分的足够小,则频率分布图直方图就会变成一条平滑曲线,即为密度图,事实上,我们常常提及的正态分布,就是一种密度图,因此直方图常常与密度图结合在一起,而柱状图是用来描述各个类别的大小。
2.核心函数及核心参数介绍
hist(x,bins,density,histtype,rwidth,color)
常用参数意义介绍
x--要绘制的数据;
bins--数据划分为区间的数量或者给定区间范围,若给定一个整数,则表示将数据划分为区间的个数,若给定一个序列例如[1,2,3,4],则表示将数据分布划分为[1,2),[2,3),[3,4]三个区间;
density--默认为False,即显示各区间的数据频数,若设置为True,则显示密度,即频率/区间长度;
histtype--直方图的形状,可取值为'bar','barstacked','step','stepfilled';
rwidth--直方图中柱子的宽度;
color--直方图颜色;
备注:上述参数必须给定参数x,其余参数均可缺省。
3.简单直方图实例展示
import numpy as npimport matplotlib.pyplot as plt# 生成数据np.random.seed(0)x = 10+np.random.randn(1000)*2plt.rc('font', family='STSong')plt.title('直方图')plt.hist(x, bins=10)plt.ylabel('频数', fontsize=15)plt.show()

上述代码结果图
# 仅修改hist函数中density参数取值plt.hist(x, bins=10, density=True)

设定density为True后结果图
注意:上述密度是频率除区间长度,而并非频率。
4.直方图密度图实例展示
import numpy as npimport matplotlib.pyplot as pltimport matplotlib.mlab as mal# 生成数据np.random.seed(0)x = 10+np.random.randn(1000)*2plt.rc('font', family='STSong')plt.title('直方图')plt.hist(x, bins=10, density=True, color='pink')k=mal.GaussianKDE(x)x=np.linspace(x.min(), x.max(), 1000)plt.plot(x, k(x))plt.ylabel('密度', fontsize=15)plt.show()

上述代码结果图
事实上,对于密度图而言,利用seaborn库可以非常简单地进行绘制,seaborn库是基于matplotlib库的高级封装,可以更加简单、快速绘制各种图形,后续将更新seaborn库绘制各种图形。
参考资料
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist
https://matplotlib.org/gallery/pyplots/pyplot_text.html#sphx-glr-gallery-pyplots-pyplot-text-py