matplotlib从起点出发(11)_Tutorial_11_TightLayout

如何使用紧凑的而已来干净利落地将绘图放入图形中。

tight_layout会自动调整子图参数,使子图适合图区域。这是一项实验性功能,在某些情况下可能不起作用。它仅检查刻度标签、轴标签和标题的范围。

tight_layout的替代方法是constrained_layout。

1 简单的例子

在matplotlib中,Axes(包括子图)的位置归一化的图形坐标指定。你的轴标签或标题(有时甚至是刻度标签)可能会超出图窗区域,从而被剪裁。

import matplotlib.pyplot as plt
import numpy as npplt.rcParams['savefig.facecolor'] = "0.8"def example_plot(ax, fontsize=12):ax.plot([1, 2])ax.locator_params(nbins=3)ax.set_xlabel('x-label', fontsize=fontsize)ax.set_ylabel('y-label', fontsize=fontsize)ax.set_title('Title', fontsize=fontsize)plt.close('all')
fig, ax = plt.subplots()
example_plot(ax, fontsize=24)

在这里插入图片描述

为了防止这种情况,需要调整Axes的位置。对于子图,可以通过使用Figure.subplots_adjust调整子图参数来手动完成。Figure.tight_layout会自动执行此操作。

fig, ax = plt.subplots()
example_plot(ax, fontsize=24)
plt.tight_layout()

在这里插入图片描述

请注意,matplotlib.pyplot.tight_layout()只会在调用时调整子图参数。为了在每次重绘图形时执行此调整,可以调用fig.set_tight_layout(True),或者等效地将rcParams["figure.autolayout"](默认值:False)设置为True.

当有多个子图存在时,通常会看到不同的Axes的标签相互重叠。

plt.close('all')fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2)
example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
example_plot(ax4)

在这里插入图片描述

tight_layout()还可以调整子图之间的间距以最小化重叠。

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2)
example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
example_plot(ax4)
plt.tight_layout()

在这里插入图片描述

tight_layout()可以接受pad、w_pad和h_pad的关键字参数。它们控制着图形边框周围和子图之间的额外填充。填充器以字体大小的分数指定。

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2)
example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
example_plot(ax4)
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)

在这里插入图片描述

即使子图的大小不同,只要它们的网格规格兼容,tight_layout()也会起作用,在下面的示例中,ax1和ax2是 2 × 2 2 \times 2 2×2网格的子图,而ax3是 1 × 2 1\times 2 1×2网格的子图。

plt.close('all')
fig = plt.figure()ax1 = plt.subplot(221)
ax2 = plt.subplot(223)
ax3 = plt.subplot(122)example_plot(ax1)
example_plot(ax2)
example_plot(ax3)plt.tight_layout()

在这里插入图片描述

它适用于使用subplot2grid()创建的子图。通常,从gridspec(在图中排列多个Axes)创建的子图将起作用。

plt.close('all')
fig = plt.figure()ax1 = plt.subplot2grid((3, 3), (0, 0))
ax2 = plt.subplot2grid((3, 3), (0, 1), colspan=2)
ax3 = plt.subplot2grid((3, 3), (1, 0), colspan=2, rowspan=2)
ax4 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
example_plot(ax4)plt.tight_layout()

在这里插入图片描述

虽然没有经过彻底测试,但它似乎适用于具有aspect != "auto"的子图(例如,带有图像的Axes)。

arr = np.arange(100).reshape((10, 10))plt.close('all')
fig = plt.figure(figsize=(5, 4))ax = plt.subplot()
im = ax.imshow(arr, interpolation="none")plt.tight_layout()

在这里插入图片描述

2 警告

  • tight_layout默认情况下,考虑Axes上的所有Artist。若要从布局计算中删除Artist,可以调用Artist.set_in_layout
  • tight_layout假设Artist所需的额外空间与轴的原始位置无关。这通常是正确的,但在极少数情况下并非如此;
  • pad=0可以将某些文本剪辑几个像素。这可能是当前算法的错误或限制,目前尚不清楚为什么会发生这种情况。同时,建议使用大于0.3的填充。

3 使用 GridSpec

GridSpec有自己的GridSpec.tight_layout方法(pyplot api pyplot.tight_layout也可以)。

import matplotlib.gridspec as gridspecplt.close('all')
fig = plt.figure()gs1 = gridspec.GridSpec(2, 1)
ax1 = fig.add_subplot(gs1[0])
ax2 = fig.add_subplot(gs1[1])example_plot(ax1)
example_plot(ax2)gs1.tight_layout(fig)

在这里插入图片描述

可以提供一个可选的rect参数,该参数指定子图将适合的边界框。坐标必须采用归一化图形坐标,默认值为(0,0,1,1)。

fig = plt.figure()gs1 = gridspec.GridSpec(2, 1)
ax1 = fig.add_subplot(gs1[0])
ax2 = fig.add_subplot(gs1[1])example_plot(ax1)
example_plot(ax2)gs1.tight_layout(fig, rect=[0, 0, 0.5, 1.0])

在这里插入图片描述

但是,我们不建议将其用于手动构造更复杂的布局,例如在图的左侧有一个GridSpec,在图的右侧有一个GridSpec。对于这些用例,应该利用嵌套网格规范或Figure子图。

3 图例和注释

在matplotlib2.2之前,图例和注释被排除在决定布局的边界框计算之外。随后,这些Artist被添加到计算中,但有时不希望将它们包括在内。例如,在这种情况下,最好将Axes缩小一点,以便为图例腾出空间:

fig, ax = plt.subplots(figsize=(4, 3))
lines = ax.plot(range(10), label='A simple plot')
ax.legend(bbox_to_anchor=(0.7, 0.5), loc='center left',)
fig.tight_layout()
plt.show()

在这里插入图片描述

但是,有时这是不希望的(通常在使用fig.savefig('outname.png',bbox_inches='tight')时)。为了从边界框计算中删除图例,我们只需设置其边界leg.set_in_layout(False),图例将被忽略。

fig, ax = plt.subplots(figsize=(4, 3))
lines = ax.plot(range(10), label='B simple plot')
leg = ax.legend(bbox_to_anchor=(0.7, 0.5), loc='center left',)
leg.set_in_layout(False)
fig.tight_layout()
plt.show()

在这里插入图片描述

4 使用AxesGrid1

虽然受到限制,但也支持mpl_toolkits.axes_grid1

from mpl_toolkits.axes_grid1 import Gridplt.close('all')
fig = plt.figure()
grid = Grid(fig, rect=111, nrows_ncols=(2, 2),axes_pad=0.25, label_mode='L',)for ax in grid:example_plot(ax)
ax.title.set_visible(False)plt.tight_layout()

在这里插入图片描述

5 颜色条

如果使用Figure.colorbar创建颜色条,则只要父Axes也是子图,创建的乐观积极就会在子图中绘制,因此Figure.tight_layout将起作用。

plt.close('all')
arr = np.arange(100).reshape((10, 10))
fig = plt.figure(figsize=(4, 4))
im = plt.imshow(arr, interpolation="none")plt.colorbar(im)plt.tight_layout()

在这里插入图片描述

另一种选择是使用AxesGrid1工具包为颜色条显式创建Axes。

from mpl_toolkits.axes_grid1 import make_axes_locatableplt.close('all')
arr = np.arange(100).reshape((10, 10))
fig = plt.figure(figsize=(4, 4))
im = plt.imshow(arr, interpolation="none")divider = make_axes_locatable(plt.gca())
cax = divider.append_axes("right", "5%", pad="3%")
plt.colorbar(im, cax=cax)plt.tight_layout()

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

使用电脑时提示msvcp140.dll丢失的5个解决方法

“计算机中msvcp140.dll丢失的5个解决方法”。在我们日常使用电脑的过程中,有时会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。那么,什么是msvcp140.dll呢?它的作用是什么?丢失它会对电脑产生什么影响呢&…

pytorch基础语法问题

这里写目录标题 pytorch基础语法问题shapetorch.ones_like函数和torch.zeros_like函数y.backward(torch.ones_like(x), retain_graphTrue)torch.autograd.backward参数grad_tensors: z.backward(torch.ones_like(x))来个复杂例子z.backward(torch.Tensor([[1., 0]])更复杂例子实…

C# 查询腾讯云直播流是否存在的API实现

应用场景 在云考试中,为防止作弊行为的发生,会在考生端部署音视频监控系统,当然还有考官方监控墙系统。在实际应用中,考生一方至少包括两路直播流: (1)前置摄像头:答题的设备要求使…

Activiti6工作流引擎:Form表单

表单约等于流程变量。StartEvent 有一个Form属性,用于关联流程中涉及到的业务数据。 一:内置表单 每个节点都可以有不同的表单属性。 1.1 获取开始节点对应的表单 Autowired private FormService formService;Test void delopyProcess() {ProcessEngi…

笔记:AI量化策略开发流程-基于BigQuant平台(一)

从本文开始,按照AI策略开发的完整流程(共七步),上手在BigQuant平台上快速构建AI策略。本文首先介绍如何使用证券代码模块指定股票范围和数据起止日期。重要的事情说三遍:模块的输入端口有提示需要连线的上游数据类型&a…

报错信息Update your application‘s configuration

在使用Maven项目时,有一个报错信息是:Update your applications configuration 这类问题,就是我们的application.yml文件 或者 application.properties文件 内容哪里写错了 我的问题是格式对齐方式出错,如下: 修改过后…

设计模式JAVA

1 创建型 如何合理的创建对象? 1.1 单例模式 字面意思就是只能创建一个对象实例时使用。 例如,Windows中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等…

为什么要学习去使用云服务器,外网 IP能干什么,MAC使用Termius连接阿里云服务器。保姆级教学

目录 引言 可能有人想问为什么要学习云服务器? (获取Linux环境,获得外网IP) 二、安装教程 引言 可能有人想问为什么要学习云服务器? (获取Linux环境,获得外网IP) 1.虚拟机(下策) …

Python零基础小白常遇到的问题总结

文章目录 一、注意你的Python版本1.print()函数2.raw_input()与input()3.比较符号&#xff0c;使用!替换<>4.repr函数5.exec()函数 二、新手常遇到的问题1、如何写多行程序&#xff1f;2、如何执行.py文件&#xff1f;3、and&#xff0c;or&#xff0c;not4、True和False…

LINUX入门篇【4】开发篇--开发工具vim的使用

前言&#xff1a; 从这一篇开始&#xff0c;我们将正式进入使用LINUX进行写程序和开发的阶段&#xff0c;可以说&#xff0c;由此开始&#xff0c;我们才开始真正去使用LINUX。 介绍工具&#xff1a; 1.LINUX软件包管理器yum&#xff1a; 1.yum的介绍&#xff1a; 在LINUX…

【教3妹学编程-算法题】2923. 找到冠军 I

3妹&#xff1a;2哥2哥&#xff0c;你看到新闻了吗&#xff1f;襄阳健桥医院院长 公然“贩卖出生证明”&#xff0c; 真是太胆大包天了吧。 2哥 : 我也看到新闻了&#xff0c;7人被采取刑事强制措施。 就应该好好查查他们&#xff0c; 一查到底&#xff01; 3妹&#xff1a;真的…

Oracle(18)Auditing

文章目录 一、基础知识1、审计介绍2、Auditing Types 审计类型3、Auditing Guidelines 审计准则4、Auditing Categories 审核类别5、Database Auditing 数据库审计6、Auditing User SYS 审计sys用户7、Getting Auditing Informatio 获取审计信息8、获取审计记录通知 二、基础操…

赛氪助力全国大学生数学竞赛山东赛区圆满举办

近日&#xff0c;全国大学生数学竞赛山东赛区比赛有序进行&#xff0c;赛氪已连续6年助力本项赛事蓬勃发展。在中国高等教育学会高校竞赛评估与管理体系研究专家工作组发布的《2022全国普通高校大学生竞赛分析报告》中&#xff0c;本赛事荣登观察目录。 全国大学生数学竞赛旨在…

基于STC12C5A60S2系列1T 8051单片机串口通信信应用

基于STC12C5A60S2系列1T 8051单片机串口通信应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器列表基于STC12C5A60S2系列1T 8051单片…

高校教务系统登录页面JS分析——长沙理工大学教务系统

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文将是本专栏最后一篇文章&#xff0c;我看了绝大多数高…

【代码随想录】算法训练计划18

1、513. 找树左下角的值 题目&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 思路&#xff1a; 递归&#xff0c;规则&#xff0c;基本可以自己写出来 var maxDepth int var res int fun…

Spring Gateway基础知识总结

本文主要总结Spring Gateway的基础用法&#xff0c;内容包括网关、Spring Gateway工作流程、Spring Cloud Gateway搭建、路由配置方式、负载均衡实现、断言工厂这几个部分 目录 1. 网关 1.1 网关介绍 1.2 网关对比 1.3 Spring Gateway 1.4 核心概念 1.6 总结 2. Spring …

React进阶之路(二)-- 组件通信、组件进阶

文章目录 组件通信组件通信的意义父传子实现props说明子传父实现兄弟组件通信跨组件通信Context通信案例 React组件进阶children属性props校验组件生命周期 组件通信 组件通信的意义 组件是独立且封闭的单元&#xff0c;默认情况下组件只能使用自己的数据&#xff08;state&a…

【C++破局】C++内存管理之new与deleted剖析

​作者主页 &#x1f4da;lovewold少个r博客主页 ⚠️本文重点&#xff1a;c内存管理部分知识点梳理 &#x1f449;【C-C入门系列专栏】&#xff1a;博客文章专栏传送门 &#x1f604;每日一言&#xff1a;花有重开日&#xff0c;人无再少年&#xff01; 目录 C/C的内存分配机…

Git 命令详解

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 C技能系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream we…