直⽅图设置坐标_你了解matplotlib吗?直⽅图基础篇
⾸先按照惯例先来认识下直⽅图是谁,以下是从搬运过来的直⽅图的定义:
在统计学中,直⽅图(英语:Histogram)是⼀种对数据分布情况的图形表⽰,是⼀种⼆维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量,以长条图(bar)的形式具体表现。因为直⽅图的长度及宽度很适合⽤来表现数量上的变化,所以较容易解读差异⼩
的数值。
直⽅图也是⽤条形进⾏标注的,⽽条形图和直⽅图犹如孪⽣兄弟般让很多⼈都傻傻分不清,那么我们就先来好好区分⼀下这两种图形吧:条形图是⽤条形的长度表⽰各类别频数的多少,⽽宽度(表⽰类别)是固定的,没有实际的数值意义。
直⽅图是⽤⾯积表⽰各组频数的多少,条形的长度表⽰每⼀组的频数或频率,条形的宽度表⽰各组的组距,所以直⽅图中条形的长度和宽度都是有实际的数值意义的。
条形图描述分类变量,直⽅图描述数值变量。
由于分组数据具有连续性,直⽅图的各矩形通常是连续排列,⽽条形图则是分开排列的。
单纯⽂字不够直观的话,我们来个图感受下:
绘制直⽅图
区分好了条形图和直⽅图,就可以安⼼的探索直⽅图了。
假设我们有⼀组数据,是⼀个学校200位同学的⾝⾼数据,如果想要知道该校学⽣⾝⾼的分布,那么直⽅图再合适不过了。
这⾥我⽤随机数⽣成了200个值在150到180之间的数表⽰⾝⾼信息:
data = np.random.randint(150,180,200)data
输出的结果:
array([162, 166, 158, 166, 165, 170, 157, 156, 164, 161, 154, 176, 166,      176, 153, 169, 164, 153, 171, 175, 171, 173, 155, 165, 168, 160,      162, 150以上就是200位同学的⾝⾼信息了,存储在⼀个数组中。
如果是常见的查看分布,直⽅图很容易绘制,这⾥我们通过这组数据探索下直⽅图函数中各个参数的作⽤,以更游刃有余的绘制符合需求的直⽅图。
bins参数
bins参数指的是要将数据分成⼏组,它接收的参数可以是整数,也可以是序列,还可以是字符串,常⽤的是整数和序列。
如果是整数n,则表⽰要将所有数据平均分成n组进⾏绘图
如果是序列,则是指定每⼀组的临界值
通过代码来看⼀下区别:
fig = plt.figure(figsize=(16,4))pic1 = fig.add_subplot(131)plt.hist(data)plt.title("bins默认10")pic2 = fig.add_subplot(132)plt.hist(data,bins = 15) plt.title("bins = 15")pic
能够看出即使是同⼀个数据集,分组的情况不同,呈现出来的分布也是有区别的,所以如何分组分成⼏组也是有学问的。
如果传给参数的是序列,则表⽰将每个分组的临界值都标识出来,缺点是⽐较⿇烦,优点是很灵活,可以⾃主决定每个组的组距,每个组
的组距都可以是不同的,如果分5组记得需要的临界值是6个,参数序列中需要有6个数值。
range参数
⼀般绘制直⽅图,都是对整个数据集绘制,有时候可能会有这样的需求,⽐如我想看该校中⾝⾼在155
cm到175cm之间的⾝⾼分布,那
么就需要将整个数据集中符合要求的⾝⾼挑选出来绘制直⽅图,实际上不⽤这么⿇烦,⽤range参数就可以解决,这个参数就是指定绘图时
使⽤数据的范围的,它接收的是⼀个元组,元组中放⼊两个数值表⽰所取数据的范围。
fig = plt.figure(figsize=(9,4))pic1 = fig.add_subplot(121)plt.hist(data,bins = 10) plt.title('range默认None')pic2 = fig.add_subplot(122)plt.hist(data,bins = 10,range=(1
能够看到x轴的数值范围发⽣了变化,整个直⽅图的形状也发⽣了变化。
density参数
这个参数的意思其实很直观,参数名字直译成中⽂就是密度的意思。普通的直⽅图y轴表⽰的都是频数,⽽通过density参数可以将y轴转化
成密度刻度,这个参数接收布尔值,默认为None。
fig = plt.figure(figsize=(9,4))pic1 = fig.add_subplot(121)plt.hist(data,bins = 10) #y轴表⽰计数plt.title('density默认None')pic2 = fig.add_subplot(122)plt.hist(data,bins
虽然两个图的形状是完全⼀模⼀样的,但是细看就能发现y轴的数值不⼀样,具体的参数作⽤已经以备注的形式标注到代码中了哦。
这⾥涉及到了另⼀个参数normed,这个参数已经被弃⽤了,它的作⽤和density⼀样,只⽤density就可以了,
weights参数
⼤家对这个参数应该不陌⽣,它经常出现,表⽰权重。没错在这⾥也是表⽰设置权重。它接收的是⼀个序列,序列中是数值,数值的数量
和原数据集中元素的个数⼀致,也就是每个数值都有⾃⼰单独的权重,我⽤随机数⽣成了200个数值作为权重传给参数,看⼀下和不设置权
重时有哪些变化。
x0=np.random.rand(200)#⽣成总和为1的200个数,设置随机权重ratio=1/sum(x0)x1=x0*ratiofig = plt.figure(figsize=(9,4))pic1 = fig.add_subplot(121)plt.hist(data,bins
当所有元素的权重都⼀样时是第⼀幅图的情况,⽽进⾏权重设置后,分布情况发⽣了变化,⽽且y轴也发⽣了变化,不再是单纯的计数。在
实际⼯作中要谨慎使⽤权重,以符合业务需求为主哈。
cumulative参数
如果英⽂⽐较好的⼈们,⼀眼就能看出这个参数的作⽤,直译成中⽂就是累积的意思。到这⾥⼜出现了⼀个⼩问题,很多⼈对“累
积”和“累计”⼜傻傻分不清了,其实这两者还是很容易区分的,看下图特别直观:
是不是能直观区分“累积”和“累计”了?
那就继续探索cumulative参数吧,这个参数接收布尔值,默认为False,通过代码来看⼀下参数设置不同都有怎样的结果。
fig = plt.figure(figsize=(9,4))pic1 = fig.add_subplot(121)plt.hist(data,bins = 10) plt.title('cumulative默认False')pic2 = fig.add_subplot(122)plt.hist(data,bins = 10,cum
左边时普通的直⽅图,右边时累积直⽅图,同样可以根据实际的业务需求来进⾏参数设置哦。
由于篇幅有限,对直⽅图函数的介绍就先到这⾥啦。细⼼的⼩伙伴可能发现了介绍参数的顺序就是按照函数官⽅⽂档中参数的顺序来的,没错,就是按照这个顺序进⾏的。但是参数中的第⼀个参数x却没有进⾏介绍,是这个参数没什么可介绍的嘛?当然不是,这个参数也是有matplotlib中subplot
些⼩细节需要注意的,具体的讲解留到下⼀篇⽂章和其他参数⼀起介绍啦。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。