首先引入包,matplotlib,据说可以绘制各种几何图,甚至3D立体图
以下是直方图绘制方法
import matplotlib.pyplot as plt
import numpy as np
x=np.random.randint(0,100,100)#生成【0-100】之间的100个数据
plt.hist(x,bins=10)#x为要统计的数据,bins表示有多少条柱子
plt.xlabel('x')#x轴标签
plt.ylabel('y')#y轴标签
plt.xlim(0,100)#设置x轴分布范围
plt.show()#显示图形
hist(x,bins=None,range=None, density=None, bottom=None, histtype='bar',, log=False, color=None, label=None, stacked=False, normed=None)
x: 数据集,最终的直方图将对数据集进行统计
bins: 统计的区间分布,即要显示几条柱子
range: tuple, 显示的区间,range在没有给出bins时生效
density: bool,是否归一化,若为True则归一化显示
histtype: 可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar柱形,
align: 可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
log: bool,默认False,即y坐标轴是否选择指数刻度
stacked: bool,默认为False,是否为堆积状图
以下是直方图的几种处理,先放着,日后再研究:
def normed(data,img): w=img.shape[0] h=img.shape[1] gui=np.zeros(256,dtype=np.float) for i in range(256): gui[i]=data[i] for i in range(256): gui[i]=data[i]/(w+h) return gui def leiji(g): lei=np.zeros(256,dtype=np.float) for i in range(256): lei[i]=g[i] for i in range(1,256): lei[i]=lei[i]+lei[i-1] print(lei) return lei def zheng(data): z=np.zeros(256,dtype=np.float) for i in range(256): z[i]=data[i] for i in range(256): z[i]=int(data[i]*255+0.5) return z re=h(img)#原图直方图 gui=normed(re,img)#归一化直方图 lei=leiji(gui)#累积直方图 z=zheng(lei)#取整 plt.figure(figsize=(12,5)) plt.subplot(141) plt.bar(range(256),re,width=1) plt.title("bar") plt.subplot(142) plt.bar(range(256),gui,width=1) plt.title("one_bar") plt.subplot(143) plt.bar(range(256),lei,width=1) plt.title('current_bar') plt.subplot(144) plt.bar(range(256),z,width=1) plt.title("whole_bar")