(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. 设置文档权限…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...