matplotlib复杂子图布局

文章目录

    • 简介
    • 网格布局
    • 组合网格布局
    • GridSpec

简介

matplotlib绘制的图像有不同的层级,从大到小依次是窗口、坐标系以及图像。所以,一个完整的绘图流程是,通过plt.figure生成窗口,再由窗口来添加坐标系,最后在坐标系中生成不同的图案。

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
y1, y2 = np.sin(x), np.cos(x)fig = plt.figure("subgraphs")
for i in range(2):ax = fig.add_subplot(1,2,i+1)ax.plot(x, y1)ax.plot(x, y2)plt.show()

其中,fig就是一个窗口,ax是fig中的一个坐标系,其位置通过三元组来约束,例如 ( 1 , 2 , 1 ) (1,2,1) (1,2,1)表示一行、两列坐标系中的第一个图像。

在这里插入图片描述

如果想省略窗口这一步骤,那么可以采取如下方案,首席按plt.subplot会在当前默认窗口中生成子坐标系,plt.plot会在当前默认的坐标系中绘图。

for i in range(2):plt.subplot(1,2,i+1)plt.plot(x, y1)plt.plot(x, y2)plt.show()

网格布局

从add_subplot添加子图的方式可知,坐标系在填充到窗口之前,需要把窗口分成 m m m n n n列,然后再按照从左到右、从上到下的顺序排列,最后将子图放到其中的一个网格里。

这种规整的网格布局,使得批量生成子图成为可能,只需用subplots函数,就可以直接返回窗口和对应的坐标系

fig, axes = plt.subplots(2,3)
plt.show()

在这里插入图片描述

组合网格布局

subplot中的网格,并不是一个真实的网格,而只是一种划分地盘的方式。换言之,多个子图,可以通过不同的方式来布局。例如下面的组合

  • A (1,2,1) 1行2列,第一个图,即占据整个图窗的左侧
  • B (2,2,2) 2行2列,第2个图,位于图窗的右上角
  • B (2,2,4) 2行2列,第4个图,位于图窗的右下角
plt.subplot(1,2,1)
plt.title("A")
plt.subplot(2,2,2)
plt.title("B")
plt.subplot(2,2,4)
plt.title("C")
plt.show()

在这里插入图片描述

GridSpec

对于大部分需求,组合网格已经足够强大,但组合网格没法让左侧的A图占据 2 3 \frac{2}{3} 32的宽度。为了实现指定宽度的网格,需要用到GridSpec对象。

GridSpec主要输入4个参数,分别用于划分网格和指定网格尺寸。下面就实现一个可以让A图占据 2 3 \frac{2}{3} 32宽度的子图

gs = plt.GridSpec(2, 2, width_ratios=[2, 1], height_ratios=[1, 1])plt.subplot(gs[:, 0])
plt.title("A")
plt.subplot(gs[0, 1])
plt.title("B")
plt.subplot(gs[1, 1])
plt.title("C")
plt.show()

其中,width_ratios为横向的单元格宽度比例,height_ratios为纵向的单元格高度比例。由整体被划分为 2 × 2 2\times2 2×2网格,所以横向由两组单元格组成,二者宽度只比为2:1,从而实现了左侧A图占据 2 3 \frac{2}{3} 32的绘图窗口,效果如下。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/333251.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以太网交换机——稳定安全,构筑数据之桥

交换机,起源于集线器和网桥等网络通信设备,它在性能和功能上有了很大的发展,因此逐渐成为搭建网络环境的常用的设备。 随着ChatGPT爆发,因为用户量激增而宕机事件频频发生,云计算应用催生超大规模算力需求,…

速卖通跨境智星:解决IP及环境问题,实现批量注册轻松搞定

如果想要注册大批量的速卖通买家号,关键问题之一就是IP及浏览环境的管理。为了确保每个账号都能独立运行,使用独立的IP是必不可少的。近期,速卖通跨境智星备受关注,支持绑定代理IP,并内置反指纹技术,为用户…

table嵌套table的样式

文章目录 table嵌套的格式table嵌套表格的样式注意 table嵌套注意事项 table嵌套的格式 tr 内嵌table <table><tr><table></table></tr> </table>td内嵌table <table><tr><td><table></table></td>…

Android 架构 - 模块化

参考文章 谷歌官方指南 一、概念 将大型、复杂问题拆解成一个个小的、简单问题&#xff0c;从而可以做到各个击破。模块化简单讲就是把多功能高耦合的代码逻辑拆散成多个功能单一职责明确的模块。模块指 Android 项目中的 module&#xff0c;通常会包含 Gradle 构建脚本、源代…

N-138基于springboot,vue在线教育平台

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plusredis…

Vue2:通过props给组件传数据

一、业务场景 我们在使用Vue组件时&#xff0c;常常会复用Vue组件&#xff0c;那么&#xff0c;问题来了&#xff0c;复用的时候&#xff0c;业务数据不相同&#xff0c;怎么办了&#xff1f; 这里我们就需要学习新的属性&#xff1a;props来实现这个功能。 这样&#xff0c;组…

拦截器HandlerInterceptor | springmvc系列

拦截器&#xff0c;通俗来来将&#xff0c;就是我们将访问某个路径的请求给拦截下来&#xff0c;然后可以对这个请求做一些操作 基本使用 创建拦截器类 让类实现HandlerInterceptor接口&#xff0c;重写接口中的三个方法。 Component //定义拦截器类&#xff0c;实现Handle…

如何用GPT/GPT4完成AI绘图和论文写作?

详情点击链接&#xff1a;如何用GPT/GPT4完成AI绘图和论文写作&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Clau…

数据结构与算法-栈-移掉K位数字

移掉K位数字 给你一个以字符串表示的非负整数 num 和一个整数 k &#xff0c;移除这个数中的 k **位数字&#xff0c;使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 &#xff1a; 输入&#xff1a;num "1432219", k 3 输出&#xff1a;&quo…

Java面向对象综合练习(拼图小游戏),用java图形化界面实现拼图小游戏

1. 设计游戏的目的 锻炼逻辑思维能力利用Java的图形化界面&#xff0c;写一个项目&#xff0c;知道前面学习的知识点在实际开发中的应用场景 2. 游戏的最终效果呈现 Hello&#xff0c;各位同学大家好。今天&#xff0c;我们要写一个非常有意思的小游戏 —《拼图小游戏》 我们…

RabbitMQ(十一)队列的扩展属性(Arguments)

目录 一、简介二、队列扩展属性清单三、代码示例3.1 实现方式一&#xff1a;channel.queueDeclare()3.2 实现方式二&#xff1a;QueueBuilder.build() 一、简介 RabbitMQ 允许用户在声明队列、交换机或绑定时设置 扩展属性&#xff08;Arguments&#xff09;&#xff0c;这些扩…

美区PayPal个人版注册绑VISA虚拟卡支付教程,贝宝预防风控日常消费付款技巧

很多人有国区PAYPAL&#xff0c;但是国区有非常多的限制&#xff0c;比如说很多美区商户不支持国区PAYPAL付款&#xff0c;这是最主要的区别&#xff0c;其他就是转账限制。 绑定PAYPAL这里我用的是Fomepay 4288卡段的卡 我们先来注册绑卡&#xff0c;首先你需要搭建一个支付…