本节主要保存直方图(柱状图)的图形展示。主要参考为《基于Python的金融风险管理》
使用函数为hist()函数
from pylab import mpl
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy.random as npr
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']#在图中显示中文
plt.rcParams['font.size'] = 13 # 控制字体大小
随机生成一些样本用来画图
#获取不同分布的随机数
I=1000 #随机抽样的次数
x_norm=npr.normal(loc=0.8,scale=1.5,size=I) #从均值等于0.8,标准差等于1.5的正态分布中抽取样本
x_logn=npr.lognormal(mean=0.5,sigma=1.0,size=I) #从均值等于0.5,标准差等于1.0的对数正态分布中抽取样本
x_chi=npr.chisquare(df=4,size=I)
x_beta=npr.beta(a=2,b=4,size=I)
单一样本的直方图
plt.figure(figsize=(12,10))
plt.subplot(2,2,1) #代表第一行第一列的子图
plt.hist(x_norm,label=u'正态分布的抽样',bins=20,facecolor='y',edgecolor='k')#直方图,x每个矩形对应的数据,bins表示图中矩形的数量,facecolor矩形的背景颜色,edgecolor矩形的边框颜色
plt.xticks(fontsize=13)#x轴的刻度
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13,rotation=90)
plt.legend(loc=0,fontsize=13)#显示图列,loc图例的位置0最佳,1右上,2左上,3左下,4右下,5右,6中左,7中右,8中下,9中上,10中
plt.grid(True)#网格
#网格
#(axis绘制哪一组网格线,axis=‘x’表示仅绘制x轴的网格线,color颜色,linestyle设置网格线样式,linewidth设置网格线的宽度)
plt.subplot(2,2,2)
plt.hist(x_logn,label=u'对数正态分布的抽样',bins=20,facecolor='r',edgecolor='k')
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13,rotation=90)
plt.legend(loc=0,fontsize=13)
plt.grid(True)
plt.subplot(2,2,3) #代表第2行第1列的子图
plt.hist(x_chi,label=u'卡方分布的抽样',bins=20,facecolor='b',edgecolor='k')
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13,rotation=90)
plt.legend(loc=0,fontsize=13)
plt.grid(True)
plt.subplot(2,2,4) #代表第2行第1列的子图
plt.hist(x_beta,label=u'贝塔分布的抽样',bins=20,facecolor='c',edgecolor='k')
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13,rotation=90)
plt.legend(loc=0,fontsize=13)
plt.grid(True)
多个样本的直方图(展示画堆叠,并列的直方图)
堆叠的直方图
x_normal=npr.normal(loc=0.8,scale=1.5,size=(I,2)) #从均值等于0.8,标准差等于1.5的正态分布中抽取样本生成1000行,2列的数组
#堆叠展示
plt.figure(figsize=(8,5))
plt.hist(x_normal,label=[u'正态分布的抽样数组 1',u'正态分布的抽样数组 2'],stacked=True,bins=30,edgecolor='k')#stacked=True代表堆叠展示
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13,rotation=90)
plt.title(u'正态分布随机抽取的两组样本值堆叠的直方图')
plt.legend(loc=0,fontsize=13)
plt.grid(True)
并排的直方图
plt.figure(figsize=(8,5))
plt.hist(x_normal,label=[u'正态分布的抽样数组 1',u'正态分布的抽样数组 2'],bins=30,edgecolor='k')#不加stacked=True,代表并排展示
plt.xticks(fontsize=13)
plt.xlabel(u'样本值',fontsize=13)
plt.yticks(fontsize=13)
plt.ylabel(u'频数',fontsize=13,rotation=90)
plt.title(u'正态分布随机抽取的两组样本值并排的直方图')
plt.legend(loc=0,fontsize=13)
plt.grid(True)