官方文档:matplotlib的hist函数
目录
示例:绘制概率密度函数pdf 、累计分布函数cdf
hist 语法& 参数注解
绘制一维正态分布直方图的三种方式
绘制二维正态分布
直方图(histogram)能展示数值型数据的数据分布情况;也就是先对数据分组,再用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距。由于分组数据具有连续性,直方图的各矩形通常是连续排列。
条形图是用条形的长度表示各类别频数的多少,其宽度(表示类别)则是固定的;各组数据分开排列;主要用于展示类别数据。
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
#高斯分布的概率分布直方图
mean = 0 #均值为0
sigma = 1 #标准差为1,反应数据集中还是分散的值
x=mean+sigma*np.random.randn(10000)
fig,(ax0,ax1) = plt.subplots(nrows=2,figsize=(9,6)) #绘制2行1列的子图
#第二个参数bins越大、则条形bar越窄越密
ax0.hist(x,40,normed=1,histtype='bar',facecolor='yellowgreen',alpha=0.75) #normed=True或1 表示频率图
##pdf概率分布图,一万个数落在某个区间内的数有多少个
ax0.set_title('pdf')
#cdf累计概率函数,cumulative累计。比如需要统计小于5的数的概率
ax1.hist(x,20,normed=1,histtype='bar',facecolor='pink',alpha=0.75,cumulative=True,rwidth=0.8)
ax1.set_title("cdf")
fig.subplots_adjust(hspace=0.4)
plt.show()
结果如下图所示:
在使用matplotlib的hist函数绘制直方图时,一维数组用pandas中的Series,二维数组使用DataFrame。
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
plt.hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None,
histtype=u'bar', align=u'mid', orientation=u'vertical', rwidth=None, log=False, color=None,
label=None, stacked=False, hold=None, **kwargs)
color #条状图的颜色 facecolor #直方图颜色 edgecolor #直方图边框颜色 alpha # 透明度
histtype #直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’
orientation # 水平或垂直方向 rwidth #柱子与柱子之间的距离,默认是0
# coding=utf-8
import numpy as np
from numpy.linalg import cholesky
import matplotlib.pyplot as plt
sampleNo = 1000;
# 一维正态分布
# 下面三种方式是等效的
mu = 3
sigma = 0.1
np.random.seed(0)
s = np.random.normal(mu, sigma, sampleNo )
#s = np.random.rand(1, sampleNo )
plt.subplot(141)
plt.hist(s, 10, normed=True) #####bins=10
np.random.seed(0)
s = sigma * np.random.randn(sampleNo ) + mu
plt.subplot(142)
plt.hist(s, 30, normed=True) #####bins=30
np.random.seed(0)
s = sigma * np.random.standard_normal(sampleNo ) + mu
plt.subplot(143)
plt.hist(s, 30, normed=True) #####bins=30
mu = np.array([[1, 5]])
Sigma = np.array([[1, 0.5], [1.5, 3]])
R = cholesky(Sigma)
s = np.dot(np.random.randn(sampleNo, 2), R) + mu
plt.subplot(144)
# 注意绘制的是散点图,而不是直方图
plt.plot(s[:,0],s[:,1],'+')
plt.show()
【参考链接】
【1】matplotlib.pyplot中的hist函数
【2】 python matplotlib之 hist直方图