matplotlib的hist函数绘制直方图

   官方文档:matplotlib的hist函数 


matplotlib的hist函数绘制直方图_第1张图片

目录

示例:绘制概率密度函数pdf 、累计分布函数cdf

hist 语法& 参数注解

绘制一维正态分布直方图的三种方式

绘制二维正态分布


直方图(histogram)能展示数值型数据的数据分布情况;也就是先对数据分组,再用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距。由于分组数据具有连续性,直方图的各矩形通常是连续排列

条形图是用条形的长度表示各类别频数的多少,其宽度(表示类别)则是固定的;各组数据分开排列;主要用于展示类别数据。


示例:绘制概率密度函数pdf 、累计分布函数cdf

# -*- 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函数绘制直方图_第2张图片

 


hist 语法& 参数注解

在使用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)
  • x 为要绘制的数据,一维数组可用pandas的Series结构,二维数组使用DataFrame
  • bins 指定条带bar 的总个数,个数越多,条形带越紧密。
  • range :筛选数据范围,默认是最小到最大的取值范围
  • normed :为True是频率图默认False是频数图; 绘制概率密度函数pdf 和累计分布函数cdf时要指定normed=1;显示为每个条状图的占比例比;
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()
matplotlib的hist函数绘制直方图_第3张图片 hist函数绘制的一维正态分布(前3个)、二维正态分布

【参考链接】

【1】matplotlib.pyplot中的hist函数

【2】  python matplotlib之 hist直方图

 

你可能感兴趣的:(python机器学习)