matplotlib从起点出发(13)_Tutorial_13_Autoscaling

0 自动放缩

轴上的限制可以手动设置(例如ax.set_xlim(xmin, xmax)),或者Matplotlib可以根据Axes上已有的数据自动设置它们。此种放缩行为有许多选项,如下所述。

我们将从一个简单的折线图开始,显示自动缩放将轴限制扩展到数据的极限 ( − 2 π , 2 π ) (-2\pi, 2\pi) (2π,2π)之外5%。

import matplotlib.pyplot as plt
import numpy as np

import matplotlib as mpl

x = np.linspace(-2 * np.pi, 2 * np.pi, 100)
y = np.sinc(x)

fig, ax = plt.subplots()
ax.plot(x, y)

在这里插入图片描述

小白按:matplotlib的默认自动放缩就是以数据分布极限的±5%的余量来控制绘图的。下面将会讲到“余量”(裕度),默认余量等概念。

1 边距裕度

默认的边距裕度为数据极限的5%,这是基于rcParams["axes.xmargin"](默认0.5)、rcParams["axes.ymargin"](默认0.5)和rcParams["axes.zmargin"](默认0.5)的默认配置设置:

print(ax.margins())

输出为:

(0.05, 0.05)

可以修改裕度参数来让边距更小或更大:

fig, ax = plt.subplots()
ax.plot(x, y)
ax.margins(0.2, 0.2)

在这里插入图片描述

通常,边距裕度可以在(-0.5, ∞)范围内,其中负边距将axes限制设置为数据范围的子范围,即它们的裁剪数据。使用单个数字作为边距裕度会影响两个轴,可以使用关键字参数x或y自定义单个边距,但位置和关键字接口不能同时组合。

fig, ax = plt.subplots()
ax.plot(x, y)
ax.margins(y=-0.2)

在这里插入图片描述

2 粘性边缘

有些绘图元素(Artist)没有边距裕度。比如伪彩色图(例如由Axes.imshow创建的)就不在边距裕度的计算范围内。

xx, yy = np.meshgrid(x, x)
zz = np.sinc(np.sqrt((xx - 1)**2 + (yy - 1)**2))

fig, ax = plt.subplots(ncols=2, figsize=(12, 8))
ax[0].imshow(zz)
ax[0].set_title("default margins")
ax[1].imshow(zz)
ax[1].margins(0.2)
ax[1].set_title("margins(0.2)")

在这里插入图片描述

边距裕度的这种覆盖由“粘性边界”所确定,“粘性边界”是Artist类的一个属性,可以禁止将边距裕度添加到轴限制。可以通过更改use_sticky_edges在轴上禁用粘性边界的效果。Artist具有属性Artist.sticky_edges, 可以通过写入Artist.sticky_edges.xArtist.sticky_edges.y来更改粘性边缘的值。

以下示例演示重写的工作原理,以及何时需要重写:

fig, ax = plt.subplots(ncols=3, figsize=(16, 10))
ax[0].imshow(zz)
ax[0].margins(0.2)
ax[0].set_title("default use_sticky_edges\nmargins(0.2)")
ax[1].imshow(zz)
ax[1].margins(0.2)
ax[1].use_sticky_edges = False
ax[1].set_title("use_sticky_edges=False\nmargins(0.2)")
ax[2].imshow(zz)
ax[2].margins(-0.2)
ax[2].set_title("default use_sticky_edges\nmargins(-0.2)")

在这里插入图片描述

我们看到,将use_sticky_edges设置为False会呈现具有请求边距的图像。

虽然粘性边界不会通过额外的边距裕度来增加轴限制,但仍会考虑负边距(即使没有将use_sticky_edges设置为False)。这可以从第三张图像的减小限制中看出。

3 控制自动缩放

默认情况下,每次向绘图添加新曲线时,都会重新计算极限:

fig, ax = plt.subplots(ncols=2, figsize=(12, 8))
ax[0].plot(x, y)
ax[0].set_title("Single curve")
ax[1].plot(x, y)
ax[1].plot(x * 2.0, y)
ax[1].set_title("Two curves")

在这里插入图片描述
但是,在某些情况下,你不希望窗口自动按新数据进行调整。

禁用自动缩放的一种方法是手动设置轴限制。假设我们只想更详细地查看部分数据。即使我们向数据添加更多曲线,设置xlim也会保持不变。若要重新计算新限制,调用Axes.autoscale将手动切换功能。

fig, ax = plt.subplots(ncols=2, figsize=(12, 8))
ax[0].plot(x, y)
ax[0].set_xlim(left=-1, right=1)
ax[0].plot(x + np.pi * 0.5, y)
ax[0].set_title("set_xlim(left=-1, right=1)\n")
ax[1].plot(x, y)
ax[1].set_xlim(left=-1, right=1)
ax[1].plot(x + np.pi * 0.5, y)
ax[1].autoscale()
ax[1].set_title("set_xlim(left=-1, right=1)\nautoscale()")

在这里插入图片描述

我们可以使用Axes.get_autoscale_on()检查第一个图是否禁用了自动缩放,第二个图是否再次启用了它:

print(ax[0].get_autoscale_on())  # False means disabled
print(ax[1].get_autoscale_on())  # True means enabled -> recalculated

输出:

False
True

自动缩放函数的参数为我们提供了对自动缩放过程的精确控制。参数enableaxis的组合设置所选轴(或两者)的自动缩放功能。参数tight将所选轴的边距裕度设置为零。要保留enabletight的设置,你可以将相对的参数设置为None,这样就不应该修改它。但是,将enable设置为Nonetight设置为True会影响两个轴,而不考虑轴参数。

fig, ax = plt.subplots()
ax.plot(x, y)
ax.margins(0.2, 0.2)
ax.autoscale(enable=None, axis="x", tight=True)

print(ax.margins())

在这里插入图片描述

输出为

(0,0)

4 使用Collection

自动缩放功能开箱即用,适用于添加到Axes的所有线条、面片和图像。它不会与之合作的Artist类之一是Collection。将集合添加到Axes后,必须手动触发autoscale_view()以重新计算轴限制。

fig, ax = plt.subplots()
collection = mpl.collections.StarPolygonCollection(
    5, rotation=0, sizes=(250,),  # five point star, zero angle, size 250px
    offsets=np.column_stack([x, y]),  # Set the positions
    offset_transform=ax.transData,  # Propagate transformations of the Axes
)
ax.add_collection(collection)
ax.autoscale_view()

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何生成生成一个修仙世界的狗血短剧剧本

如何生成生成一个修仙世界的狗血短剧剧本 生成一个修仙世界的狗血短剧剧本将上述剧本转为对话 生成一个修仙世界的狗血短剧剧本 剧本名称:《仙途情缘》 角色: 易天行:男主角,天赋异禀的修仙者,性格坚毅,正…

鸿蒙开发系列教程(十九)--页面内动画(2)

组件内转场动画 组件的插入、删除过程即为组件本身的转场过程,组件的插入、删除动画称为组件内转场动画。通过组件内转场动画,可定义组件出现、消失的效果。 transition(value: TransitionOptions) 参数可以定义平移、透明度、旋转、缩放这几种转场样…

rabbitmq自用记录

参考博客RabbitMq安装与使用(mac)高效总结(亲测)_mac 安装rabbitmq 服务端口-CSDN博客 启动服务 这里提前把redis服务也启动了 这里看到前端更改数据,后端进行日志打印 登录后访问rabbitmq网址

docker数据科学与spark镜像源与使用常见问题疑难解答

以下是一些与数据挖掘和数据科学相关的 Docker 镜像源: jupyter/all-spark-notebook: 此镜像包含 Jupyter Notebook 和 Spark 的完整环境,用于 Spark 开发和学习。 rocker/tidyverse: 此镜像包含用于 R 语言的 tidyverse 数据科学包。 jupyter/scipy-n…

代码随想录算法训练营Day25|回溯算法·组合总和III,电话号码的字母组合

组合总和III 题目:找出所有相加之和为n的k个数的组合。组合中只允许含有1-9的正整数,并且每种组合中不存在重复的数字。 组合变量个数为k个,和为n。简单思路是使用k重循环,一层层找出来,然后把每一层的数相加&#x…

单链表的介绍

一.单链表的概念及结构 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的 。 结构:根据个人理解,链表的结构就像火车厢一样,一节一节连在一起的&#x…

浅析Linux追踪技术之ftrace:Event Tracing

文章目录 概述使用Event Tracing使用set_event接口使用enable接口 Event配置Event formatEvent Filtering过滤规则设置过滤器 Event TriggerTrigger语法 Trace marker相关参考 概述 Event Tracing(事件追踪)利用在内核代码中加入的各种Tracepoint&#…

计算机网络概述习题拾遗

学习目标: 自下而上第一个提供端到端服务的层次 路由器、交换机、集线器实现的功能层 TCP/IP体系结构的网络接口层对应OSI体系结构的哪两个层次 分组数量对总时延的影响 如果这篇文章对您有帮助,麻烦点赞关注支持一下动力猿吧! 学习内容…

Hive的Join连接、谓词下推

前言 Hive-3.1.2版本支持6种join语法。分别是:inner join(内连接)、left join(左连接)、right join(右连接)、full outer join(全外连接)、left semi join(左…

课时27:内容格式化_输入格式化_EOF原理

3.2.1 EOF原理 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 场景需求 在运维岗位中,有非常多的场景需要我们在脚本中编写应用软件的配置文件。在这些应用软件的配置文件中,经常携带大量的格式&#xff0…

第四篇【传奇开心果微博系列】Python微项目技术点案例示例:美女颜值判官

传奇开心果微博系列 系列微博目录Python微项目技术点案例示例系列 微博目录一、微项目目标二、雏形示例代码三、扩展思路四、添加不同类型的美女示例代码五、增加难度等级示例代码六、添加特殊道具示例代码七、设计关卡系统示例代码八、添加音效和背景音乐示例代码九、多人游戏…

一文看懂春晚刘谦魔术

魔术步骤 step1: 准备4张牌,跟随魔术步骤,见证奇迹 step2: 将4张牌平均斯成两份,并叠在一起 step3: 将牌堆顶数量为名字字数的牌移到牌堆底 step4: 将前三张牌放在牌堆中间并取出牌堆顶的一张牌放到屁股下 step5: 南方人、北方人、不确定分别取顶上的1/2/3张牌插入牌堆…

Stable Diffusion主流UI详细介绍

Stable Diffusion目前主流的操作界面有WebUI、ComfyUI以及Fooocus 这里webui和fooocus在人机交互上的逻辑是一样的,fooocus界面更加简洁。 comfyui是在人机交互上是采用流程节点的交互逻辑,和上面略有区别。 界面分别如下: WebUI界面如下 we…

C/C++内存管理:new、delete功能及原理实现

目录 一、C/C内存分布 二、C中内存管理方式 2.1new/delete操作内置类型 2.2 new和delete操作自定义类型 三、operator new与operator delete函数 四、new和delete的实现原理 4.1内置类型 4.2自定义类型 五、定位new 一、C/C内存分布 int globalVar 1; static int sta…

HarmonyOS鸿蒙学习基础篇 - Column/Row 组件

前言 Row和Column组件是线性布局容器,用于按照垂直或水平方向排列子组件。Row表示沿水平方向布局的容器,而Column表示沿垂直方向布局的容器。这些容器具有许多属性和方法,可以方便地管理子组件的位置、大小、间距和对齐方式。例如&#xff0c…

四、案例 - Oracle数据迁移至MySQL

Oracle数据迁移至MySQL 一、生成测试数据表和数据1.在Oracle创建数据表和数据2.在MySQL创建数据表 二、生成模板文件1.模板文件内容2.模板文件参数详解2.1 全局设置2.2 数据读取(Reader)2.3 数据写入(Writer)2.4 性能设置 三、案例…

博主用树莓派绕过 Windows Bitlocker 加密,用时不到一分钟

近日 YouTube 博主 stacksmashing 发现 Bitlocker 存在一个巨大的安全漏洞,他利用价值不到 10 美元的树莓派 Pico 在不到一分钟内成功绕过了该加密。 2 月 7 日消息,微软 Windows 10 和 11 专业版内置的 Bitlocker 加密功能一直被认为是方便易用的安全解…

伦敦金是现货黄金吗?

伦敦金属现货黄金交易的一种形式。投资者可以通过伦敦金市场直接买卖黄金,以实现投资收益。伦敦金市场具有高度流动性和透明度,是全球投资者广泛参与的贵金属交易市场之一。 什么是现货黄金? 现货黄金是指实物黄金的交易,投资者可…

编辑器的新选择(基本不用配置)

Cline 不用看网上那些教程Cline几乎不用配置。 点击设置直接选择Chinese, C直接在选择就行了。 Cline是一个很好的编辑器,有很多懒人必备的功能。 Lightly 这是一个根本不用配置的C编辑器。 旁边有目录,而且配色也很好,语言标准可以自己…

优先级队列(堆)_PriorityQueue

前言 想要看如何使用可以通过目录跳转到 PriorityQueue的使用 优先级队列 概念 队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队 列时,可能需要优先级高的元素先出队列,该中场…