python绘制直方图matplotlib.pyplot.hist( ) 方法常用参数详解

1.在了解绘制直方图函数的参数之前,首先要知道如何绘制直方图:

一般而言,直方图一般用于观察数据的分布情况,横轴将根据观测到的数据选择合适的范围进行范围分段,即将整个观测数据的范围分成一系列间隔,每一个间隔称为一个组距,然后计算每个间隔中有多少值;每个间隔中的值称为频数,用纵轴来代表频数的话就是我们常说的频数直方图,此时直方图中的面积没有意义

根据纵轴表示的不同,还有一种直方图称为频率直方图,的在统计出每一个间隔中的频数后,将频数除以总的观测数,就得到了每一个间隔中的频率,然后将频率除以组距(每一个间隔的宽度),即用纵轴来表示 频率/组距 的大小;之所以要除以组距的目的是为了让频率直方图的阶梯形折线将逼近于概率密度曲线。也就是说,当观测数据充分大时,频率直方图近似地反映了概率密度曲线的大致形状,在统计推断中常常由此提出对总体分布形式的假设。(具体解释如下:截取自百度百科

python绘制直方图matplotlib.pyplot.hist( ) 方法常用参数详解_第1张图片

2.了解了直方图的基本含义,我们看如何调用函数绘制直方图

在python中,绘制直方图是使用matplotlib.pyplot.hist()函数,具体参数如下:

(n, bins, patches)=matplotlib.pyplot.hist(x, bins=None, range=None, density=None, weights=None, 
cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', 
rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)

可以看到有很多参数,其实在实际使用过程中我们只需要关注几个重要的参数就可以了

首先,最简单的,使用默认的,输入数据,绘制直方图,而不设置任何参数

import numpy as np
import matplotlib.pyplot as plt

#生成数据,以10000组均值为0,方差为1的高斯分布数据为例
data = np.random.normal(0,1,10000)

n, bins, patches = plt.hist(data)
plt.show()

python绘制直方图matplotlib.pyplot.hist( ) 方法常用参数详解_第2张图片

结果如上图:从图中可以看出共分为了10个间隔,这是因为我们没有指定分为几个间隔,默认会分为10个间隔,返回值中的bins表示每一个间隔的边缘(起点和终点),所以共11个;而返回值中的n表示的是落入每一个间隔的样本数

python绘制直方图matplotlib.pyplot.hist( ) 方法常用参数详解_第3张图片

但上图,由于所分间隔太大的缘故,太粗糙了,为了进一步细化直方图,我们可以通过调整函数中的参数bins

参数bins: 划分间隔,可以采用 整数来指定间隔的数量,然后由程序由间隔的数量来确定每一个间隔的范围,也可以通过列表来直接指定间隔的范围

bins : int or sequence or str, optional

常用的通过整数来划分间隔,我们指定间隔数为50,效果图如下:

n, bins, patches = plt.hist(data,50)
plt.show()

python绘制直方图matplotlib.pyplot.hist( ) 方法常用参数详解_第4张图片

也可以用列表,为简单起见,我只分为4个间隔来说明:

n, bins, patches = plt.hist(data,[-3,-2,0,1,3])
plt.show()
#我们指定的是间隔的边缘,每一个间隔为[-3,-2) [-2,0) [0,1) [1,3]
#除了最后一个间隔外,所有间隔均为左闭右开
#而且每一个间隔长度不用相等
#在我们指定间隔外的数据会被直接忽略

python绘制直方图matplotlib.pyplot.hist( ) 方法常用参数详解_第5张图片

也就是说如果我们通过指定bins整数来确定间隔,那么我们就是在整个区间上进行分割,但是如果我们想在一定范围内进行分割并且还想通过指定bins整数来实现怎么办呢?

参数range就可以上场搭配bins了,参数range的类型为tuple型,指定全局间隔(min,max)

range : tuple or None, optional

注:如果bins为列表形式,则range对其无影响

我们想要在[-3,3]的范围内分10个间隔来画直方图

n, bins, patches = plt.hist(data,10,(-3,3))
plt.show()

python绘制直方图matplotlib.pyplot.hist( ) 方法常用参数详解_第6张图片

到现在,我们所画的均为频数直方图,那么如果我们想画频率直方图呢?

通过函数中的参数 density即可,density的类型是 bool型,指定为True,则为频率直方图,反之,频数直方图

density : bool, optional

n, bins, patches = plt.hist(t,10,(-3,3),density = True)
plt.show()

python绘制直方图matplotlib.pyplot.hist( ) 方法常用参数详解_第7张图片

注意观察纵轴的刻度变化

当然你也可以通过color参数给直方图换个颜色

n, bins, patches = plt.hist(t,10,(-3,3),density = True,color = 'green')
plt.show()

python绘制直方图matplotlib.pyplot.hist( ) 方法常用参数详解_第8张图片

常用的应该就是这些吧,详细的参数分析可以查看官方手册:

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist

你可能感兴趣的:(Python)