(matplotlib)如何让各个子图ax大小(宽度和高度)相等
文章目录
- 不相等
- 相等
import matplotlib.pyplot as plt
import numpy as np
plt.rc('font',family='Times New Roman')
import matplotlib.gridspec as gridspec
不相等
我用如下subplots代码画一行四个子图,
fig,(ax1,ax2,ax3,ax4)=plt.subplots(1,4,figsize=(20,10),dpi=300)
然后往各个子图中填充东西,可以最终得到四个大小不一样的子图,气死了。
下面是源代码,虽然有点长,但是后面3个子图其实都是复制黏贴画第一个子图的代码而已。
fig,(ax1,ax2,ax3,ax4)=plt.subplots(1,4,figsize=(20,10),dpi=300)
plt.tick_params(labelsize=13)
font2 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size' : 18,
}
mat1=[[6.6653e-04, 1.1918e-04, 2.7586e-05, 6.7634e-06],[4.1138e-07, 1.3437e-04, 8.7720e-03, 9.9109e-01]]
mat2=[[0.0525, 0.0872, 0.0680, 0.1104, 0.0913],[0.1241, 0.0598, 0.1842, 0.0944, 0.2625]]
mat3=[[0.1099, 0.0782, 0.0827, 0.1141, 0.1160, 0.1113],[0.0670, 0.0602, 0.0869, 0.0607, 0.0646, 0.1443],[0.0828, 0.2043, 0.2473, 0.0332, 0.0344, 0.1214]]
mat4=[[0.1497, 0.0930, 0.0391, 0.1680, 0.0686, 0.0033, 0.1716, 0.1482,0.1557],[0.0867, 0.0803, 0.0777, 0.1071, 0.0728, 0.0809, 0.0816, 0.1320,0.1258],[0.0753, 0.0865, 0.0495, 0.1047, 0.0498, 0.1516, 0.0992, 0.1403,0.0341],[0.0978, 0.0529, 0.0065, 0.2158, 0.0117, 0.0104, 0.1325, 0.3183,0.1506],[0.0896, 0.0927, 0.0704, 0.0822, 0.0709, 0.1574, 0.0882, 0.0766,0.0555]]
m1=2
m2=2
m3=3
m4=5mat1=np.array(mat1).T
mat1=mat1/(mat1.sum(-1).reshape(-1,1))
ax1c=ax1.matshow(mat1)
# plt.colorbar(ax1c,fraction=0.07)
ax1.set_yticks([0,1,2,3])
ax1.set_yticklabels([0,0,1,1])
ax1.set_xticks(list(range(m1)))
ax1.set_xticklabels(list(range(m1)))
ax1.set_ylabel("historical event sequence",font2)
ax1.set_xlabel("event types",font2)mat2=np.array(mat2).T
mat2=mat2/(mat2.sum(-1).reshape(-1,1))
ax2c=ax2.matshow(mat2)
# plt.colorbar(ax2c,fraction=0.07)
ax2.set_yticks([0,1,2,3,4])
ax2.set_yticklabels([1, 0, 1, 0, 1])
ax2.set_xticks(list(range(m2)))
ax2.set_xticklabels(list(range(m2)))
# ax2.set_ylabel("history events",font2)
ax2.set_xlabel("event types",font2)mat3=np.array(mat3).T
mat3=mat3/(mat3.sum(-1).reshape(-1,1))
ax3c=ax3.matshow(mat3)
# plt.colorbar(ax3c,fraction=0.07)
ax3.set_yticks([0,1,2,3,4,5])
ax3.set_yticklabels([1, 0, 0, 2, 2, 1])
ax3.set_xticks(list(range(m3)))
ax3.set_xticklabels(list(range(m3)))
# ax3.set_ylabel("history events",font2)
ax3.set_xlabel("event types",font2)mat4=np.array(mat4).T
mat4=mat4/(mat4.sum(-1).reshape(-1,1))
ax4c=ax4.matshow(mat4)
ax4.set_yticks([0,1,2,3,4,5,6,7,8])
ax4.set_yticklabels([4, 1, 3, 4, 3, 2, 1, 4, 0])
ax4.set_xticks(list(range(m4)))
ax4.set_xticklabels(list(range(m4)))
# ax4.set_ylabel("history events",font2)
ax4.set_xlabel("event types",font2)plt.colorbar(ax4c,fraction=0.06)
plt.show()
相等
百思不得其解,最后找了好久终于在网上找到了解决办法,但是你要我说为什么上面代码会不相等,我也不知道。
上面中,我唯一知道的就是最后一个图由于有colorbar
这个东西,好像确实会导致整个子图变形,会和其他3个子图不一样,但是我仍然不知道为什么前面三个子图不是一样宽高。而且我还试了,即使不要colorbar
,四个子图大小还是不一样。
不管了,反正我已经找到了解决办法。核心就是使用gridspec
,这个东西是一个好东西,建议大家学一学,可能可以顺带解决很多其他大小问题。
核心代码如下,使用gridspec
来创建5个子图(最后一个子图留出来放置colorbar
)
fig=plt.figure(figsize=(20,8),dpi=300)
gs=gridspec.GridSpec(1, 5, width_ratios=[1,1,1,1,0.05])#指定各个子图的宽比例。
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
ax3 = plt.subplot(gs[2])
ax4 = plt.subplot(gs[3])
cax = plt.subplot(gs[4])
最终效果如下:
完整代码如下:
fig=plt.figure(figsize=(20,8),dpi=300)
gs=gridspec.GridSpec(1, 5, width_ratios=[1,1,1,1,0.05])
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
ax3 = plt.subplot(gs[2])
ax4 = plt.subplot(gs[3])
cax = plt.subplot(gs[4])
# fig,(ax1,ax2,ax3,ax4)=plt.subplots(1,4,figsize=(20,10),dpi=300)
plt.tick_params(labelsize=13)
font2 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size' : 18,
}
mat1=[[6.6653e-04, 1.1918e-04, 2.7586e-05, 6.7634e-06],[4.1138e-07, 1.3437e-04, 8.7720e-03, 9.9109e-01]]
mat2=[[0.0525, 0.0872, 0.0680, 0.1104, 0.0913],[0.1241, 0.0598, 0.1842, 0.0944, 0.2625]]
mat3=[[0.1099, 0.0782, 0.0827, 0.1141, 0.1160, 0.1113],[0.0670, 0.0602, 0.0869, 0.0607, 0.0646, 0.1443],[0.0828, 0.2043, 0.2473, 0.0332, 0.0344, 0.1214]]
mat4=[[0.1497, 0.0930, 0.0391, 0.1680, 0.0686, 0.0033, 0.1716, 0.1482,0.1557],[0.0867, 0.0803, 0.0777, 0.1071, 0.0728, 0.0809, 0.0816, 0.1320,0.1258],[0.0753, 0.0865, 0.0495, 0.1047, 0.0498, 0.1516, 0.0992, 0.1403,0.0341],[0.0978, 0.0529, 0.0065, 0.2158, 0.0117, 0.0104, 0.1325, 0.3183,0.1506],[0.0896, 0.0927, 0.0704, 0.0822, 0.0709, 0.1574, 0.0882, 0.0766,0.0555]]
m1=2
m2=2
m3=3
m4=5mat1=np.array(mat1).T
mat1=mat1/(mat1.sum(-1).reshape(-1,1))
ax1c=ax1.matshow(mat1)
# plt.colorbar(ax1c,fraction=0.07)
ax1.set_yticks([0,1,2,3])
ax1.set_yticklabels([0,0,1,1])
ax1.set_xticks(list(range(m1)))
ax1.set_xticklabels(list(range(m1)))
ax1.set_ylabel("historical event sequence",font2)
# 在顶部坐标轴设置标签
ax1.xaxis.set_label_position('top')
# 设置顶部坐标轴的刻度线,如果没有下面的代码,默认刻度标签在底部
ax1.xaxis.tick_top()
# 设置顶部坐标轴的标记
ax1.set_xlabel('event types',font2)mat2=np.array(mat2).T
mat2=mat2/(mat2.sum(-1).reshape(-1,1))
ax2c=ax2.matshow(mat2)
# plt.colorbar(ax2c,fraction=0.07)
ax2.set_yticks([0,1,2,3,4])
ax2.set_yticklabels([1, 0, 1, 0, 1])
ax2.set_xticks(list(range(m2)))
ax2.set_xticklabels(list(range(m2)))
# ax2.set_ylabel("history events",font2)
# 在顶部坐标轴设置标签
ax2.xaxis.set_label_position('top')
# 设置顶部坐标轴的刻度线,如果没有下面的代码,默认刻度标签在底部
ax2.xaxis.tick_top()
# 设置顶部坐标轴的标记
ax2.set_xlabel('event types',font2)mat3=np.array(mat3).T
mat3=mat3/(mat3.sum(-1).reshape(-1,1))
ax3c=ax3.matshow(mat3)
# plt.colorbar(ax3c,fraction=0.07)
ax3.set_yticks([0,1,2,3,4,5])
ax3.set_yticklabels([1, 0, 0, 2, 2, 1])
ax3.set_xticks(list(range(m3)))
ax3.set_xticklabels(list(range(m3)))
# ax3.set_ylabel("history events",font2)
# 在顶部坐标轴设置标签
ax3.xaxis.set_label_position('top')
# 设置顶部坐标轴的刻度线,如果没有下面的代码,默认刻度标签在底部
ax3.xaxis.tick_top()
# 设置顶部坐标轴的标记
ax3.set_xlabel('event types',font2)mat4=np.array(mat4).T
mat4=mat4/(mat4.sum(-1).reshape(-1,1))
ax4c=ax4.matshow(mat4)
ax4.set_yticks([0,1,2,3,4,5,6,7,8])
ax4.set_yticklabels([4, 1, 3, 4, 3, 2, 1, 4, 0])
ax4.set_xticks(list(range(m4)))
ax4.set_xticklabels(list(range(m4)))
# ax4.set_ylabel("history events",font2)
# 在顶部坐标轴设置标签
ax4.xaxis.set_label_position('top')
# 设置顶部坐标轴的刻度线,如果没有下面的代码,默认刻度标签在底部
ax4.xaxis.tick_top()
# 设置顶部坐标轴的标记
ax4.set_xlabel('event types',font2)plt.colorbar(ax4c,fraction=0.06,cax=cax)plt.text(-32.1,-0.011,"(a)",size=22)
plt.text(-23.25,-0.01,"(b)",size=22)
plt.text(-14.20,-0.01,"(c)",size=22)
plt.text(-5.45,-0.01,"(d)",size=22)plt.show()
相关文章:
(matplotlib)如何让各个子图ax大小(宽度和高度)相等
文章目录 不相等相等 import matplotlib.pyplot as plt import numpy as np plt.rc(font,familyTimes New Roman) import matplotlib.gridspec as gridspec不相等 我用如下subplots代码画一行四个子图, fig,(ax1,ax2,ax3,ax4)plt.subplots(1,4,figsize(20,10),dpi…...
python http 上传文件
文章目录 改进质量 import random import requests from requests_toolbelt.multipart.encoder import MultipartEncoderurl http://ip:port/email data MultipartEncoder(fields{receiverId: xxxx163.com,mailSubject: mailSubject,content: content,fileList: (file_name, …...
IPO解读:Instacart曲折上市,业务模式如何持续“绚烂”?
商业世界的模式创新就像夜空中的烟火,而上升期的烟火总是绚烂的。 近日,美国商品配送业的鼻祖Instacart重新启动了IPO,并于9月11日,更新了招股书,将发行价定为每股26-28美元,计划融资6.16亿美元。值得一提…...
使用sql profile 稳定执行计划的案例
文章目录 1.缘起2.变慢的sql3.检查瓶颈4.解决办法4.1 SQLTXPLAIN 也称为 SQLT4.11 下载coe_xfr_sql_profile.sql4.12 使用方法4.13 执行coe_xfr_sql_profile.sql4.14 执行coe_xfr_sql_profile.sql产生的sql profile文件4.15 验证 4.2 SQL Tuning Advisor方式4.21 第一次Tuning …...
海南大学金秋悦读《乡村振兴战略下传统村落文化旅游设计》2023新学年许少辉八一新书
海南大学金秋悦读《乡村振兴战略下传统村落文化旅游设计》2023新学年许少辉八一新书...
[N0wayback 2023春节红包题] happyGame python反编译
这个反编译的比较深 一,从附件的图标看是python打包的exe文件,先用pyinstxtractor.py 解包 生成的文件在main.exe_extracted目录下,在这里边找到main 二,把main改名为pyc然后加上头 这个头从包里找一个带头的pyc文件ÿ…...
Redis 初识与入门
1. 什么是Redis Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、…...
【STM32】片上ADC的初步使用
基于stm32f103系列 基于《零死角玩转 STM32F103—指南者》 ADC简介 stm32f103上的ADC 数量:3 精度:12bit(4096) 通道:ADC1,ADC2均有16个通道,ADC3有8个 功能: 转换结束、注入转换结束和发生模拟看门狗事件时产生中断。 …...
esxi下实现ikuai相同的两个网卡,单独路由配置
1.首先安装配置双网卡。 因为esxi主机只接入了一根外网的网线,那么我们这两个网卡都是一样的网卡,具体的到系统里面进行设置。 2.开机安装系统 进入配置界面,此处就不用多说了,可以看我之前的文档,或者网上其他人的安…...
Windows环境下Elasticsearch相关软件安装
Windows环境下Elasticsearch相关软件安装 本文将介绍在 windows 环境下安装 Elasticsearch 相关的软件。 1、安装Elasticsearch 1.1 安装jdk ElasticSearch是基于lucence开发的,也就是运行需要java jdk支持,所以要先安装JAVA环境。 由于ElasticSear…...
配置Jedis连接池
一、概述 Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此推荐使用Jedis连接池代替Jedis的直连方式。 二、创建连接池 public class JedisConnectionFactory {private static final JedisPool jedisPool;static {//配置连接池Jedi…...
Windows 12 开源网页版
前言 Windows 12 网页版是一个开源项目,使用标准网络技术,例如 Html、CSS 和 Javascript, 希望让用户在网络上预先体验 Windows 12 Windows 12 网页版download Windows 12 网页版 gitlab项目Windows 12 网页版 downloadWindows 12 demo参考downloaddemo test 开始菜单 …...
circleMidpoint(scrPt c, GLint r) 未定义的标识符,openGL第四章例子 ,画饼状图。
以下是完整的例子。在第四版 《计算机图形学 with openGL》第四章的例子中,竟然只调用了circleMidpoint(scrPt &c, GLint r) ,没有实现,我认为是系统方法,怎么找都找不到。openGL 官方文档也没找到,这不会是自定义…...
RKNN模型评估-性能评估和内存评估
基于Python的模型评估 perf_debug:进行性能评估时是否开启debug 模式。在 debug 模式下,可以获取到每一层的运行时间,否则只能获取模型运行的总时间。默认值为 False。 eval_mem: 是否进入内存评估模式。进入内存评估模式后,可以…...
window mysql-8.0.34 zip解压包安装
window系统上安装mysql8 解压版 下载压缩包 https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.34-winx64.zip安装 用解压软件解压刚下载的mysql-8.0.34-winx64.zip 的文件至d:\devs路径下。 创建配置文件my.ini到路径d:\devs\mysql-8.0.34-winx64下 [mysqld] # 设置…...
Mysql判断某个数据库中是否包含某个表,与pymysql工具函数
查看某个数据库中的全部表: SELECT table_name FROM information_schema.tables WHERE table_schema 数据库名因此查看某个库中的某个表可以使用: SELECT table_name FROM information_schema.tables WHERE table_schema 数据库名 AND table_name 表…...
快速掌握正则表达式
文章目录 限定符 Qualifier第一个常用限定符 ?第二个常用限定符 *第三个常用限定符 或运算符字符类元字符 Meta-characters\d 数字字符\w 单词字符空白符 \s.任意字符^ $ 行首行尾 贪婪与懒惰匹配 Greedy vs Lazy Match实例 1 :RGB颜色匹配实例 2 &…...
git: ‘lfs‘ is not a git command unclear
首先可以尝试 git lfs install 是否可以,不可以后就看这个连接:https://stackoverflow.com/questions/48734119/git-lfs-is-not-a-git-command-unclear。 我的是ubuntu,所以: 保证这个前提: git-lfs requires git ve…...
代码随想录--哈希--两个数组的交集
题意:给定两个数组,编写一个函数来计算它们的交集。 说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 import java.util.ArrayList; import java.util.HashMap; import java.util.List;public class SSS {public …...
基于腾讯文档进行应届生个人求职记录
1. 新建一个腾讯文档 电脑登录QQ,点击“腾讯文档”功能键。 2. 可以选择下载客户端,也可以直接进入网页版。(本人使用网页版) 3. 点击新建,选择在线表格。 4. 编辑表名,表内容。 5. 设置文档权限…...
计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)
图像分类 教程博客_传送门链接:链接 在本教程中,您将学习如何使用迁移学习训练卷积神经网络以进行图像分类。您可以在 cs231n 上阅读有关迁移学习的更多信息。 本文主要目的是教会你如何自己搭建分类模型,耐心看完,相信会有很大收获。废话不…...
(18)线程的实例认识:线程的控制,暂停,继续,停止,线程相互控制,协作
话不多,但比较中肯,本文参照c# 线程暂停继续的实现方式_哔哩哔哩_bilibili 一、老方式 1、这是一个老的实现方式,基本不推荐,背后控制的原理需要了解。 界面:三个button一个textbox …...
c#动态保留小数位数的数值格式化方法实例----从小数点后非零数字保留两位进行四舍五入
c#动态保留小数位数的数值格式化方法实例----从小数点后非零数字保留两位进行四舍五入 功能介绍代码案例输出结果封装扩展方法控制台调用 其他方法地址 功能介绍 1. 输入的数字是整数,则直接返回整数部分的字符串表示。 2. 如果输入的数字是小数,则执行…...
大数据精准营销大数据平台应用场景有哪些,平台优势有哪些?
精准营销大数据平台应用场景有很多种,比如在银行领域,我通过相应的客户数据,也可以给客户推广一些银行业务。还可以运用于证券行业,除此之外还可以运用于保险或者信托行业,借助精准营销大数据平台可以进行主动营销。那…...
Pyspark案例综合(数据计算)
数据计算 map方法 map算子 map算子(成员方法)接受一个处理函数,可用lambda快速编写,对RDD内的元素一一处理,返回RDD对象 链式调用 对于返回值是新的RDD的算子,可以通过链式调用的方式多次调用算子 &q…...
电路电子技术1--关联参考方向及功率的计算
1.判断 电流由元件的低点位端流向高电位端的参考方向称为关联参考方向。() 考点:电流、电压的参考方向 解释:在一些复杂的电路中,往往不能预先确定某段电路上的电流、电压的实际方向,所以引进了 “关联参考方向”。为了能够解决问…...
【C++】AVL树的插入操作实现以及验证是否正确(带平衡因子)
文章目录 前言一、AVL树结点的定义二、AVL树的插入(Insert)插入完整代码:1.左单旋(RotateL)2.右单旋(RotateR)3.先右单旋再左单旋(RotateRL)1.保存的bf为02.保存的bf为13…...
【Linux-Day10-信号量,共享内存,消息队列】
信号量 信号量描述 信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目,获取资源 时,需要对信号量的值进行原子减一,该操作被称为 P 操作。 当信号量值为 0 时,代表没有资源可用,P 操作…...
使用IntelliJ IDEA本地启动调试Flink流计算工程的2个异常解决
记录:471 场景:使用IntelliJ IDEA本地启动调试Flink流计算时,报错一:加载DataStream报错java.lang.ClassNotFoundException。报错二:No ExecutorFactory found to execute the application。 版本:JDK 1.…...
对象及日期对象
对象 1.什么是对象 类是对象的抽象,对象是类的实例 程序算法数据结构 万物皆对象,对象是一个具体的事物,看到见摸得着,对象是一组无序相关属性和方法的集合(无序,所以对象没有length属性),所有事物都是对象,列如字符串,数值,数组,函数等. 属性:事物的特征,在对象中用属性表…...
wordpress点击页面跳转/品牌网络营销策划方案
本文作者范欣欣,其就职于网易杭州研究院后台技术中心数据库技术组,从事HBase开发、运维,对HBase相关技术有浓厚的兴趣。 任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题。HBase也一样&…...
网站的运营费用吗/百度公司简介
起因: JDK的InheritableThreadLocal类可以完成父子线程值的传递。 但对于使用线程池等会缓存线程的组件的情况,线程由线程池创建好,并且线程是缓存起来反复使用的;这时父子线程关系的上下文传递已经没有意义,应用中要做…...
自己做头像的网站非流光/贵阳百度推广电话
IoC控制反转设计原则——实现松耦合1.IoC设计原则1.1.控制程序流1.2.控制依赖对象的创建2.从典型的n层体系架构来理解IoCIOC是一种设计原则(虽然,有很多人将它当成是一种设计模式),不是设计模式。它提供了高层级的设计指南&#x…...
做网站域名是什么意思/湖南seo排名
最近把状态栏和导航栏相关的东西整理了一下,目前应用到了项目里面,测试了4.4 5.x 6.x 7.x 8.0的系统,包括oppo vivo 魅族 华为 小米 酷派等机型,都是可以的,也花了点时间,所以在这里记录一下完成后发现界面…...
拱墅网站建设/知乎推广合作
nginx在unix系统中会以daemon(守护进程)方式在后台运行; nginx默认模式是多线程的; nginx会有一个master进程和多个worker进程,master进程主要用来管理worker进程,而基本的网络事件都是worker进程来处理 worker进程之间的是平等的 worker进程的个数是可以设置的,一…...
大学校园门户网站建设/seo技术最新黑帽
1. 传指针时,我们可以通过指针来修改它在外部所指向的内容。但如果要修改外部指针所指向的对象是不可能的。例如传递外部指针到函数内来分配空间,必须传递指针的指针或指针的引用。 2. char carry[10] {0}; 编译器会将其后所有的东西都置0; …...