(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. 设置文档权限…...
K230 vs树莓派视觉套件:300元预算该选谁?实测对比工业检测场景
K230与树莓派视觉套件:300元预算下的工业检测实战对比 在工业自动化浪潮中,视觉检测系统正从大型企业向中小型制造车间快速渗透。当预算被严格限制在300元区间时,K230开发板与树莓派摄像头组合成为最受关注的两种解决方案。我们历时三个月在6…...
SpringBoot整合MQTT实战:手把手教你实现设备动态连接与主题订阅管理(附完整源码)
SpringBoot整合MQTT实战:动态连接与主题订阅管理的工程化实现 在物联网项目开发中,设备连接管理和消息路由的灵活性往往是系统设计的难点。想象这样一个场景:你的智慧农业系统需要随时接入新部署的土壤传感器,气象站设备可能因网…...
WebGL BIM可视化:浏览器端BIM解决方案的技术实践与行业应用
WebGL BIM可视化:浏览器端BIM解决方案的技术实践与行业应用 【免费下载链接】xeokit-bim-viewer A browser-based BIM viewer, built on the xeokit SDK 项目地址: https://gitcode.com/gh_mirrors/xe/xeokit-bim-viewer 如何解决浏览器端BIM模型加载慢、操…...
Matlab实战:5步搞定微电网源储荷协调调度(附完整CPLEX调用代码)
Matlab实战:微电网源储荷协调调度的5个工程化技巧 微电网调度是新能源时代的核心技术难题之一。面对风光发电的波动性和负荷需求的多变性,如何实现源、储、荷三者的动态平衡,成为电力工程师们每天都要应对的挑战。不同于学术论文中复杂的理论…...
ai辅助开发comfyui:让快马ai成为你构建复杂工作流的智能编程伙伴
最近在折腾ComfyUI时,发现构建复杂工作流特别容易卡在细节问题上。比如想同时用Canny边缘检测和Openpose控制生成效果,光是调试节点连接和参数就花了大半天。后来尝试用InsCode(快马)平台的AI辅助功能,发现能省下不少重复劳动。这里分享下用A…...
终极指南:如何从零开始打造你的第一台六足机器人
终极指南:如何从零开始打造你的第一台六足机器人 【免费下载链接】hexapod 项目地址: https://gitcode.com/gh_mirrors/hexapod5/hexapod 你是否梦想过亲手制作一台能够灵活行走、稳定爬行的六足机器人?想要体验机器人制作的乐趣,却担…...
OpenClaw入门到精通:GLM-4.7-Flash自动化全流程解析
OpenClaw入门到精通:GLM-4.7-Flash自动化全流程解析 1. 为什么选择OpenClawGLM-4.7-Flash组合 去年冬天,当我第一次尝试用Python脚本批量处理公司周报时,发现传统自动化工具在面对非结构化数据时显得力不从心。直到接触了OpenClaw这个能直接…...
从SOP到AI Society:MGX多智能体协作平台如何重塑软件开发流程
1. MGX平台如何用SOP机制颠覆传统开发模式 我第一次接触MGX平台时,被它的标准化操作流程(SOP)惊艳到了。这就像把一个混乱的施工现场变成了井然有序的装配线,每个智能体都知道自己该在什么时候做什么事。传统开发中,我…...
背包问题Ⅱ与二分问题
今天我对背包问题有了更深的理解,我一定要写下来,巩固自己的思路并且,遇到新的难题二分,不管了,干就完了!!!完全背包以今天写的代码展开详细描述与解释,并附上题目#define N 1001 in…...
终极指南:掌握JSON-BigInt解决JavaScript大整数精度丢失问题
终极指南:掌握JSON-BigInt解决JavaScript大整数精度丢失问题 【免费下载链接】json-bigint JSON.parse/stringify with bigints support 项目地址: https://gitcode.com/gh_mirrors/js/json-bigint 在JavaScript开发中,你是否遇到过处理大整数时精…...
