首页 > 编程知识 正文

bar函数绘制直方图,python做直方图

时间:2023-05-03 17:39:12 阅读:37801 作者:390

文章目录一,Numpy1.重要属性二,matpltlib1.plot(2.subplot )3.Bar )4.Numpy.histogram )5.Hist ) hist函数详细解函数内容函数详细解返回的参数滞后

一. Numpy

NumPy的主要对象是齐次多维数组。 这是一个元素表,所有元素类型都相同,元素索引为正整数元组。 在NumPy维(dimension )中称为轴(axis )。

ps .有几个轴是维度排列,符合日常生活中有x、y两个坐标轴是二维空间,进而z轴是三维空间的概念

例如,三维空间中的空点坐标[ 1,2,1 ]有一个轴。 这个轴有三个要素。 也就是说,轴的长度是3。 下面的代码区域数组有两个轴。 第一个轴的长度是2,第二个长度是3。

[1.0 .0.],[ 0.1 .2.]] Numpy的数组类称为ndarry,别名为array。 请注意,numpy.array与Python标准库的array.array类不同,标准库的类只处理一维数组。

1 .重要属性ndarray.ndim

thenumberofaxes(dimensions ) of the array。

ndarray.shape

数组维(the dimensions of the array )。 将数组中每个维的大小表示为整数元组。 例如,对于n行m列的矩阵,其shape属性为[n,m]。 thelengthoftheshapetupleisthereforethenumberofaxes,ndim。

ndarray.size

数组元素的总数。 相当于shape各元素的乘积。

ndarray.dtype

描述数组中元素类型的对象。 可以使用Python标准指定此对象。 NumPy还提供了自己的类型,如numpy.int32、numpy.int16和and numpy.float641

ndarray.itemsize

数组中每个元素的字节大小。 For example,anarrayofelementsoftypefloat 64 hasitemsize8(=64/8 ),whileoneoftypecomplex 32 hasitemsize4)=32/8.itis

二、Matpltlib参考:私人教程

Matplotlib是一个python绘图库,经常与Numpy一起使用。 也可以停止有效的Matlab开源替代方案,将其与图形工具包(如PyQt或wxPython )一起使用。

plt.title (图标题) PLT.xlabel轴标识符) (PLT.ylabel ) (y轴标识符) )创建x和y值

x=NP.arange (1,11 ) y=2*x5 )1.plot ) )直线绘制使用matplotlib的pyplot子模块的plot )函数进行。

PLT.plot(x,y ) plt.show ) )。

显示点而不是线的步骤

PLT.plot(x,y,' ob ' ) plt.show ) )。

2.Subplot ) )可以在同一张图上画不同的东西。

importnumpyasnpimportmatplotlib.pyplotasplt #正弦和余弦曲线上的点的x和y坐标x=NP.arange(0, 3 *计算3*NP.pi,0.1 ) y_sin=NP.sin(x ) y_cos=np.cos(x ) x )高度2,宽度1 )第一个subplotPLT.subplot ) 2, 1 )激活#出图y_sin ) PLT.title('sine ' )激活第二个subplot,第二个图像PLT.subplot (2,1,2 ) plt.plot(x

3.bar (按打印)子模块提供bar (用于生成条形图)。

frommatplotlibimportpyplotaspltx=[ 5,8,10 ] y=[ 12,16,6 ] x2=[ 6,9,11 ] y2=[ 6,15,7 ] PLT.bar (cololor

X axis') plt.show()

4.Numpy.histogram()

数据频率分布地图形表示,水平尺寸相等的矩形对应于类间隔,称为 wxdl,变量 height 对应于频率。

numpy.histogram()函数将输入数组和 wxdl 作为两个参数。 wxdl 数组中的连续元素用作每个 wxdl 的边界。

a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])hist,wxdls = np.histogram(a,wxdls = [0,10,20,30,40,100])print (hist)print (wxdls)

输出结果为:

[2 1 3 1 8][ 0 10 20 30 40 100]

其中hist为频率,wxdls是边界

5.Hist()

可以将直方图的数字转换为图形,pyplot子模块的hist()函数将包含数据和 wxdl 数组的数组作为参数,并转换为直方图。

hist函数详解 函数内容 def hist( x, wxdls=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs): return gca().hist( x, wxdls=wxdls, range=range, density=density, weights=weights, cumulative=cumulative, bottom=bottom, histtype=histtype, align=align, orientation=orientation, rwidth=rwidth, log=log, color=color, label=label, stacked=stacked, **({"data": data} if data is not None else {}), **kwargs) 函数详解

x : (n,) array or sequence of (n,) arrays
(数组或(允许长度不等的)数组序列)

wxdls:整数值或序列。

如果wxdls为整数值,则wxdls为柱子个数,根据数据的取值范围和柱子个数wxdls计算每个柱子的范围值,柱宽=(x.max()-x.min())/wxdls。例:数据取值为[1,2,3,4,5,6],wxdls=6,柱宽=0.8333…,则每个柱子的范围分别为:[1,1.83), [1.83,2.66)…,[5.17,6]如果wxdls取值为序列,则该序列给出每个柱子的范围值(即边缘)。除最后一个柱子外,其他柱子的取值范围均为半开(左闭右开)。接上例,数据共n=6个取值,若wxdls=range(1,n+2)即wxdls的取值为[1,2,3,4,5,6,7],注意range用法。则每个柱子的范围为:[1,2),[2,3),…,[5,6),[6,7]。注意:这里可以看出为什么wxdls的取值需要包含7,因为最后一个柱子的取值范围是全闭的,如果取值只到6,则最后一个柱子的范围为[5,6],取值为5和6的数据将被合并计算。

range : tuple or None, optional
元组(tuple)或None。剔除较大和较小的离群值,给出全局范围。如果为None,则默认为(x.min(), x.max())。如果wxdls取值为序列,则range无效,python会基于wxdls的取值画图。

density:布尔值
如果为true,则返回的元组的第一个参数frequency将为频率而非默认的频数。可自行验证sum(frequency)。

normed : boolean, optional(?)是否将得到的直方图向量归一化
normed=True表示正则化直方图,即归一化(即求频率)

weights : (n, ) array_like or None, optional
与x形状相同的权重数组。将x中的每个元素乘以对应权重值再计数。如果normed或density取值为True,则会对权重进行归一化处理。这个参数可用于绘制已合并的数据的直方图。

cumulative : boolean, optional
布尔值。如果为True,则计算累计频数。如果normed或density取值为True,则计算累计频率。

bottom : array_like, scalar, or None
数组,标量值或None。每个柱子底部相对于y=0的位置。如果是标量值,则每个柱子相对于y=0向上/向下的偏移量相同。如果是数组,则根据数组元素取值移动对应的柱子。

histtype : {‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}, optional(选择展示的类型,默认为bar)
'bar’是传统的条形直方图;'barstacked’是堆叠的条形直方图;'step’是未填充的条形直方图,只有外边框;‘stepfilled’是有填充的直方图。当histtype取值为’step’或’stepfilled’,rwidth设置失效,即不能指定柱子之间的间隔,默认连接在一起。

align : {‘left’, ‘mid’, ‘right’}, optional(对齐方式)
‘left’:柱子的中心位于wxdls的左边缘;‘mid’:柱子位于wxdls左右边缘之间;‘right’:柱子的中心位于wxdls的右边缘。可在上面两张图中求证。

orientation : {‘horizontal’, ‘vertical’}, optional(直方图方向)
如果取值为horizontal,则条形图将以y轴为基线,水平排列

log : boolean, optional(log刻度)
布尔值。如果取值为True,则坐标轴的刻度为对数刻度。如果log为True且x是一维数组,则计数为0的取值将被剔除,仅返回非空的(frequency, wxdls, patches)。

color : color or array_like of colors or None, optional(颜色设置)
体颜色,数组(元素为颜色)或None。

label : string or None, optional(刻度标签)
字符串(序列)或None。有多个数据集时,用label参数做标注区分。

stacked : boolean, optional
布尔值。如果取值为True,则输出的图为多个数据集堆叠累计的结果,见下图;如果取值为False且histtype=‘bar’或’step’,则多个数据集的柱子并排排列

返回的参数

frequency(官方文档用n表示):数组或数组列表。柱子的高,即频数或频率值,数据类型为float。

wxdls:每个柱子的左右边缘值(即区间范围),例子见上文输入参数wxdls。

patches:列表或列表的列表。取值为每个柱子包含的数据。

参考链接:
matplotlib.pyplot.hist参数详解
Python matplotlib.pyplot.hist函数 参数详解

直方图和条形图 条形图:条形图用长条形表示每一个类别,长条形的长度表示类别的频数,宽度表示表示类别。直方图:直方图是一种统计报告图,形式上也是一个个的长条形,但是直方图用长条形的面积表示频数,所以长条形的高度表示 频数/组距 ,宽度表示组距,其长度和宽度均有意义。当宽度相同时,一般就用长条形长度表示频数。 三、平滑直方图

x是直方图平滑前各个柱子的值组成的数组

def Smooth_f(x): ''' 用来实现直方图数据平滑的函数 :param x: 输入一个列表 :return: ''' print("smooth begin") print(x) y = x.copy() for i in range(1, len(y)): y[i] = 0.5*(y[i]+y[i-1]) # print([i, y[i]]) print(y) return y

直方图平滑前:

第一次平滑:

第二次平滑

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。