python之matplotlib.pyplot直方图

版权声明:欢迎转载,知识无界注明出处即可 https://blog.csdn.net/Arwen_H/article/details/81985567

matplotlib.pyplot直方图画起来还是分成方便的,思路还是准备好数据,然后设置参数即可。反正画直方图比折线图在EXCEL上方便太多了。

直方图介绍

直方图(Histogram)又称质量分布图。是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
直方图是数值数据分布的精确图形表示。 这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Karl Pearson)首先引入。它是一种条形图。 为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是(但不是必须的)相等的大小。

用直方图可以解析出资料的规则性,比较直观地看出产品质量特性的分布状态,对于资料分布状况一目了然,便于判断其总体质量分布情况。在制作直方图时,牵涉统计学的概念,首先要对资料进行分组,因此如何合理分组是其中的关键问题。按组距相等的原则进行的两个关键数位是分组数和组距。是一种几何形图表,它是根据从生产过程中收集来的质量数据分布情况,画成以组距为底边、以频数为高度的一系列连接起来的直方型矩形图

直方图参数说明

直方图是调用的matplotlib.pyplot.hist模块,不太清楚pyplot的可以参照前面的python之matplotlib.pyplot基础及折线图这篇文章

  • matplotlib.pyplot.hist的参数:

matplotlib.pyplot.hist(x,bins = None,range = None,density = None,weights = None,cumulative = False,bottom = None,histt​​ype =’bar’,align =’mid’,orientation =’vertical’,rwidth = None,log = False,color = None,label = None,stacked = False,normed = None,hold = None,data = None,** kwargs )

  • hist的参数详解翻录

x : (n,)数组或序列(n,)数组

输入值,这需要单个数组或不需要具有相同长度的数组序列

bins : 整数或序列或’auto’可选,默认是没有

如果一个整数,bins +1,则计算并返回bin边缘,与之一致numpy.histogram()

range : 元组或没有可选的,默认是没有

箱子的上下范围。上下异常值将被忽略。如果没有提供,范围是(x.min(),x.max())。如果箱子是一个序列没有影响范围
如果指定箱是一个序列或范围,自动定量是基于指定本范围而不是x的范围。

density :可选布尔类型

如果这是真的,返回第一个元素的元组将计数归一化形成一个概率密度,即。,面积(或积分)根据直方图将之和为1。这是通过将整个计算观测的数量乘以本宽度,而不是除以总数量的观察。如果堆也是真的,直方图之和是标准化为1。
默认是没有赋范和密度。如果设置,那么将使用这个值。如果没有设置,那么参数将被视为错误的

weights:可选择相同的数据或者没有

数组的重量、形状相同的x。每个值x只贡献相关重量对箱数(而不是1)。如果赋范或密度是真的,权重归一化,这样的积分密度范围是1。

cumulative:可选布尔类型

如果True,则计算直方图,其中每个bin给出该bin中的计数加上较小值的所有bin。最后一个bin给出了数据点的总数。如果赋范或密度 也True然后直方图归一化,使得最后仓等于1。如果累计计算结果为小于0(例如,-1),累积的方向被反转。在这种情况下,如果赋范和/或密度也是True,则直方图归一化,使得第一仓等于1。
默认是 False

bottom:相同数组,标量或者没有

每个仓的底部基线的位置。如果是标量,则每个bin的基线移动相同的量。如果是一个数组,每个bin都是独立移动的,底部的长度必须与bin的数量相匹配。如果为None,则默认为0。默认是 None

histt​​ype : {‘bar’,’barstacked’,’step’,’stepfilled’},可选

要绘制的直方图的类型
‘bar’是传统的条形直方图。如果给出多个数据,则条并排排列。
‘barstacked’是一种条形直方图,其中多个数据堆叠在一起。
‘step’生成一个默认未填充的线图。
‘stepfilled’生成一个默认填充的线图。
默认为’bar’

align : {‘left’,’mid’,’right’},可选

控制直方图的绘制方式。
‘left’:条形图位于左边框边缘的中心。
‘mid’:条在bin边缘之间居中。
‘right’:条形图位于右侧边框的中心。
默认为’mid’

orientation : {‘horizo​​ntal’,’vertical’},可选

如果是’horizo​​ntal’,barh将用于条形直方图,底部 kwarg将用于左边缘

log : 布尔值,可选

如果True,直方图轴将设置为对数刻度。如果 log是True且x是1D数组,则将过滤掉空箱,并且仅 返回非空。(n, bins, patches).默认是 False

color :颜色可参照python之matplotlib.pyplot基础及折线图这篇文章

颜色规格或颜色规格序列,每个数据集一个。Default(None)使用标准线颜色序列.默认是 None

官网案例

这里写图片描述

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(19680801)
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
n, bins, patches = plt.hist(x, 50, density=True, facecolor='g', alpha=0.75)

plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

实际案例

最后效果图
案例数据下载
这里写图片描述

import pandas as pd #导入pandas库
import matplotlib.pyplot as plt#导入matplotlib.pyplot库
data=pd.read_excel(r'XXXXX\直方图.xlsx')#导入数据

plt.figure(figsize=(10,5)) #设置图框大小尺寸
plt.hist(data['机器在线拟合度'],bins=100,range=(-1,1),color='#aa0000',label='机器拟合度',alpha=0.75,stacked =True)#bins=100为线的频率,数字越大频率约大,range=(-1,1)取-1至1的区间
plt.hist(data['人工在线拟合度'],bins=100,range=(-1,1),color='#666666',label='人工拟合度',alpha=0.75,stacked =True)#alpha=0.75为透明度,颜色#666666设置是百度查的
plt.plot([0,0],[0,35],color='g',linestyle=':',linewidth=2)#设置一根垂直X轴=0的参考虚线,颜色设置成绿色
plt.legend()
plt.title('人机拟合直方图2017-2018',fontsize=20)#设置直方图名称,字体为20
plt.xlabel('拟合',fontsize=20)#设置直方图X轴名称,字体为20
plt.ylabel('累计量',fontsize=20)#设置直方图Y轴名称,字体为20

猜你喜欢

转载自blog.csdn.net/Arwen_H/article/details/81985567