python可视化:matplotlib绘制直方图进阶篇
off999 2024-10-31 14:04 28 浏览 0 评论
在上篇文章中介绍了直方图的前五个参数,实际上直方图一共有十几个参数,剩下的参数利用这篇文章解释清楚,让大家能够将如何绘制直方图理解的透透的。
bottom参数
这个参数的含义也很直观,底部的意思,指的是条形的底从哪里开始。这个参数接收标量和序列,或者None,默认为None,如果是标量,则所有条形的底都从同一个数值处开始,如果为序列,则可以指定每个条形的底不一致。
fig = plt.figure(figsize=(16,4))
pic1 = fig.add_subplot(131)
plt.hist(data,bins = 10)
plt.title("bottom默认None")
pic2 = fig.add_subplot(132)
plt.hist(data,bins = 10, bottom=10) # bottom=10,表示所有条形的底部从10开始,默认从0开始
plt.title("bottom=10")
pic3 = fig.add_subplot(133)
plt.hist(data,bins = 10, bottom=np.array([21, 20, 13, 17, 22, 32, 23, 15, 22, 15])) # bottom为序列,序列长度于条形的数量一致,表示每个条的底部从哪里开始
plt.title("bottom取值为序列");
? 上图是当bottom参数不同取值时绘制出来不同的直方图,第一幅图和第二幅图看起来长的一样,但是仔细观察下就能发现两幅图y轴的起始点时不一样的,第一幅图的起点时0.第二幅图的起点是10,因为bottom参数设置的为10;而第三幅图bottom的参数设置的序列,序列的长度和直方图的组数一致,即每个条形的起始点都不同,具体设置哪种比较好,还是要看具体的业务需求哦。
histtype参数
? histtype参数控制的时直方图中条形的展现方式,它接收的参数是固定的字符串,其中常见的是以下两种形式:
fig = plt.figure(figsize=(9,4))
pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10, histtype = "bar")
plt.title(' histtype = "bar"')
pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10, histtype = "step") # histtype默认参数为”bar“,即条形,可以进行指定
plt.title(' histtype = "step"');
? 如果需要将折线图和直方图绘制到一副图中,可以考虑对条形的形式进行设置。
align参数
? align参数控制的是条形的位置,能够接收的参数也是指定的字符串,通常大家都用默认值"mid",即中间,这样直方图中的条形会居于前后临界点的中间位置,是最常见的一种:
fig = plt.figure(figsize=(16,4))
pic1 = fig.add_subplot(131)
plt.hist(data,bins = 10, align = "left")
plt.xticks([150. , 152.9, 155.8, 158.7, 161.6, 164.5, 167.4, 170.3, 173.2,176.1, 179. ],rotation = 30)
plt.title("align ='left'")
pic2 = fig.add_subplot(132)
plt.hist(data,bins = 10, align = "right")
plt.xticks([150. , 152.9, 155.8, 158.7, 161.6, 164.5, 167.4, 170.3, 173.2,176.1, 179. ],rotation = 30)
plt.title("align ='right'")
pic3 = fig.add_subplot(133)
plt.hist(data,bins = 10, align = "mid")
plt.xticks([150. , 152.9, 155.8, 158.7, 161.6, 164.5, 167.4, 170.3, 173.2,176.1, 179. ],rotation = 30)
plt.title("align ='mid'");
由于原数据和分箱规则没有变化,所以三个直方图很相近,区别在于x轴上,这里为了能直观的看出区别,特意将每组的临界值添加到了x轴,仔细查看能够看出只有最后一个图才是我们常见的直方图,前两个条形的位置都有偏移。
orientation参数
对条形图比较熟悉的朋友可能对这个参数并不陌生,它是控制条形方向的参数,接收的是特定的字符,即条形的方向是垂直的还是水平的,一般默认绘制的都是垂直方向的,如果需要横向的直方图,直接设置这个参数就好。它接收的参数是指定的字符串,表明条形方向:
fig = plt.figure(figsize=(9,4))
pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10) #默认条形方向为垂直方向
plt.title('orientation默认"vertical"')
pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10,orientation = 'horizontal') # orientation = 'horizontal'表示条形为水平方向
plt.title('orientation = "horizontal"');
参数中可选的两个字符即是垂直还是水平。
rwidth参数
从字面上看,这个参数是和宽度有关的,事实也的确是这样。这个参数可以设置条形的宽度,接收数值,但是它设置的宽度是相对于默认宽度而言的,重新设置的宽度是原宽度的几分之几,我们具体看一下代码:
fig = plt.figure(figsize=(9,4))
pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10) #rwidth控制条形的相对宽度,不进行指定,自动计算
plt.title('rwidth默认"None"')
pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10,rwidth=0.8) # 指定条形的相对宽度
plt.title('rwidth=0.8');
如果不进行设置,直方图的各个条形之间是没有空隙的,当我将rwidth设置成0.8之后,条形的宽度就只有原宽度的80%,条形之间也会出现缝隙。
log参数
log参数控制是否将刻度设置成对数刻度,接收布尔值,默认为False,进行普通刻度,一旦设置为True:
fig = plt.figure(figsize=(9,4))
pic1 = fig.add_subplot(121)
plt.hist(data,bins = 10)
plt.title('log默认"False"')
pic2 = fig.add_subplot(122)
plt.hist(data,bins = 10,log=True) # 直方图轴将设置为对数刻度。
plt.title('log=True"');
设置成对数刻度后,虽然分组情况没有变,但是分布状况还是发生了变化,如果设置了该参数,最好在标题或其他部分标注提示一下。
color参数和X
这个参数可以说是相当熟悉,很多函数中都有,表示对图形的颜色进行设置,没错的确是设置颜色,想起我们还有一个最开始的参数没有讲解,就在这里和color一起讲解了。
目前我们只有一组数据,现在呢假设有了两个学校学生的身高数据,喏,这就是第二个学校的学生身高了:
data1 = np.random.randint(150,180,200)
data1
输出结果:
array([164, 171, 172, 161, 171, 175, 161, 170, 159, 163, 154, 162, 156,
158, 160, 156, 163, 167, 170, 168, 163, 171, 174, 161, 156, 167,
165, 169, 162, 176, 167, 157, 157, 169, 160, 177, 162, 154, 163,
168, 155, 177, 151, 155, 179, 166, 170, 168, 158, 167, 156, 170,
163, 157, 172, 169, 156, 171, 155, 160, 177, 164, 157, 160, 173,
175, 164, 168, 171, 158, 163, 162, 167, 167, 169, 155, 175, 171,
162, 174, 165, 179, 167, 179, 168, 157, 151, 151, 171, 170, 168,
165, 167, 179, 153, 177, 165, 155, 153, 157, 162, 167, 173, 161,
171, 159, 165, 152, 160, 172, 154, 157, 176, 152, 171, 161, 169,
154, 171, 150, 158, 164, 150, 170, 153, 162, 150, 174, 150, 176,
167, 171, 164, 170, 171, 163, 162, 164, 174, 157, 179, 166, 150,
170, 166, 161, 155, 175, 163, 156, 152, 159, 168, 158, 176, 159,
158, 169, 155, 166, 151, 163, 177, 154, 170, 152, 167, 172, 170,
163, 161, 177, 164, 160, 157, 167, 163, 177, 169, 162, 166, 158,
156, 168, 169, 168, 159, 159, 154, 169, 168, 169, 156, 165, 173,
175, 169, 156, 158, 154])
到这里是不是有点明白了,直方图不止可以对一组数据进行绘图,多组数据也是可以的,参数x可以接收多组数据,如果是多组数据需要将多组数据打包到一起作为一个整体传给参数x:
fig = plt.figure(figsize=(16,4))
pic1 = fig.add_subplot(131)
plt.hist(data,bins = 10)
plt.title("color默认None")
pic2 = fig.add_subplot(132)
plt.hist(data,bins = 10, color="r") # 设置颜色为红色
plt.title("color="r"")
pic3 = fig.add_subplot(133)
plt.hist([data,data1],bins = 10, color=["c","orange"])
# color取值为序列,每个数据集对应一种颜色,color序列的长度与数据集个数一致
plt.title("color取值为序列");
能够看到,如果只有一组数据,color参数也就只接收一个颜色指定,如果是多组数据,可以对每个数据集的颜色进行指定,具体需要注意的点已经在代码中备注了哦。
label参数
label参数也不是陌生的参数,是对标签的设定,接收的是字符串,并没有什么特殊,但是需要注意的是如果设置了这个参数,记得调用plt.lenged()显示图例,如果不调用即使设置了标签也不能作为图例显示在图形中。而显示图例除了直接在直方图函数中设置label参数外,还可以在plt.lenged()中设置,具体的区别还是看代码吧:
fig = plt.figure(figsize=(11,4))
pic1 = fig.add_subplot(121)
plt.hist([data,data1],bins = 10, color=["c","orange"],label=["data","data1"])
plt.legend()
plt.title('hist函数中设置label参数')
pic2 = fig.add_subplot(122)
plt.hist([data,data1],bins = 10, color=["c","orange"])
plt.legend(["data","data1"])
plt.title('legend函数中设置label参数');
效果是一样的。
stacked参数
这个参数的字面意思也很直观,表示是否要堆叠,接收布尔值。需要注意的是如果绘图只用了一个数据集,那么这个参数无论设置成什么都没有影响,如果要堆叠至少需要两个数据集才能显示出区别:
fig = plt.figure(figsize=(9,4))
pic1 = fig.add_subplot(121)
plt.hist([data,data1],stacked=False) #默认多组数据并列排列
plt.title('stacked默认"False"')
pic2 = fig.add_subplot(122)
plt.hist([data,data1],stacked=True) #多组数据彼此堆叠
plt.title('stacked=True"');
区别是不是很明显了,堆叠的意思也容易理解了对不对?
以上就是直方图函数所有参数的设置讲解,希望能够帮助大家能够全面的掌握如何绘制一个符合实际需求的直方图。
相关推荐
- 戴尔官网保修查询入口(戴尔售后保质期查询)
-
可以按照以下步骤查询戴尔笔记本电脑的保修期:1.打开戴尔官网:https://www.戴尔.com/zh-cn/售后服务/保修政策.html2.点击页面上方的“服务与支持”按钮,进入戴尔的服务支持...
- 手机号邮箱登录入口(手机号邮箱官网)
-
手机163邮箱登录入口如下:163邮箱官网入口:https://smart.mail.163.com/login.htm点击进入登录或者注册邮箱即可。手机浏览器访问进入官网http://www.123...
- sd卡(sd卡无法读取怎么修复)
-
SD卡是大卡,相机用的;普通的手机内存卡,是小卡,正规的名称是macrosd卡,也就是微型SD卡。可以通过卡套转为普通的SD卡的大小。 其实就是大小不同。但手机上的内存卡,人们经常也俗称为SD...
- windows7蓝牙功能在哪里打开
-
点击搜索框在windows7系统主界面点击开始菜单,点击打开搜索框。输入命令输入services.msc后回车,在列表中找到并右击BluetoothSupportS...点击属性选择进入属性菜单,...
-
- 2010激活密钥(microsoft2010激活密钥)
-
步骤/方式1officeprofessionalplus2010:(office专业版)6QFdx-pYH2G-ppYFd-C7RJM-BBKQ8Bdd3G-xM7FB-Bd2HM-YK63V-VQFdKVYBBJ-TRJpB-QFQ...
-
2025-11-19 04:03 off999
- 联想官方刷新bios工具(联想电脑刷新bios)
-
刷新BIOS需要使用联想的官方网站或授权维修中心来进行操作。以下是一些基本步骤:1.访问联想的官方网站,找到BIOS更新程序并下载。在下载过程中,请确保选择与您计算机型号匹配的版本。2.将下载的B...
-
- 苹果ios14系统下载(苹果ios14.1下载)
-
1方法一步骤/方式一打开Appstore。步骤/方式二在搜索栏点击搜索框。步骤/方式三搜索并点击需要下载的软件。步骤/方式四点击获取。步骤/方式五最后验证ID密码即可。1.在应用商店搜索你要下载的应用名称。2.点击下载按钮,如果要求登...
-
2025-11-19 03:03 off999
- office2010怎么免费永久激活密钥
-
用这个试试,一个KMS激活工具可以激活2010到2019的Office自家的目前用的就是这个microsoft6477.moe/1716.html直接使用这个Microsoftoffice2010...
-
- 类似爱加速的国内ip(类似爱加速的app)
-
推荐“V8盒子”。这一款免费无广告的模拟器,不同于其它软件盒子,而是类似于X8沙箱,满足游戏多开,画中画,悬浮球操作,熄屏后台运行等多功能的沙箱盒子.支持一键root,一键安装xposed框架,能在安卓/苹果手机上运行多个安卓/ios虚拟系...
-
2025-11-19 02:03 off999
- 阿里旺旺手机客户端(阿里旺旺手机app)
-
手机淘宝的旺旺在打开商品后,会看到左下角有个旺旺的图标,点击就可以联系了。 阿里旺旺是将原先的淘宝旺旺与阿里巴巴贸易通整合在一起的一个新品牌。它是淘宝和阿里巴巴为商人量身定做的免费网上商务沟通软件,...
- 最纯净的pe装机工具(pe工具哪个纯净)
-
U盘装系统步骤:1.制作U盘启动盘。这里推荐大白菜U盘启动盘制作工具,在网上一搜便是。2.U盘启动盘做好了,我们还需要一个GHOST文件,可以从网上下载一个ghost版的XP/WIN7/WIN8系统,...
- 装一个erp系统多少钱(wms仓库管理软件)
-
现在主流有客户端ERP和云端ERP两种客户端通常一次买断,价格在万元左右,但是还有隐性费用,你需要支付服务器、数据管理员,此外如果系统需要更新维护,你还需要支付另外一笔不菲的费用。云端ERP:优势...
- cad2014序列号和密钥永久(autocad2014序列号和密钥)
-
1在cad2014中修改标注样式后,需要将其保存2单击“样式管理器”按钮,在弹出的窗口中选择修改后的标注样式,然后单击“设置为当前”按钮,再单击“保存当前样式”按钮,将其保存为新的样式名称3为了...
- qq修改密保手机号(qq修改密保手机号是什么意思)
-
QQ更改绑定的手机号码操作步骤如下:1、打开手机主界面,找到“QQ”软件点击打开。2、输入正确的QQ账户和密码登录到qq主界面。3、点击左上角的头像“图片”,进入到个人中心界面。4、进入到个人中心界面...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
