matplotlib从起点出发(13)_Tutorial_13_Autoscaling

news2024/11/29 23:13:07

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()

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

11-OpenFeign-实现负载均衡策略

2021.0.1版本使用 spring-cloud-loadbalancer 1、默认开启负载均衡策略 使用default RoundRobinLoadBalancer策略 无需yaml文件配置,openfeignclient配置 RandomLoadBalancer :基于随机访问的负载均衡策略NacosLoadBalancer:基于Nacos权重…

软件项目—项目管理计划

《项目管理计划》 1.项目总体组织架构 2.项目进度管理办法 3.项目沟通管理 4.项目风险管理

c++关于this指针

this指针是隐藏在每一个成员函数中的特殊指针,它指向的是所在成员对象的本身。this顾名思义,就是“这个” this:指针,指向当前的对象 ,"我" ,只能出现在类的成员函数中,一般不使用 class A { private:int i; public:int get()//获取成员变量…

微信小程序开发学习笔记《17》uni-app框架-tabBar

微信小程序开发学习笔记《17》uni-app框架-tabBar 博主正在学习微信小程序开发,希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、创建tabBar分支 运行如下的命令,基于master分支在本地创建tabBar子分支&#x…

2.13学习总结

1.出差(Bleeman—ford)(spfa) (dijkstra) 2.最小生成树(prim)(Kruskal) 最短路问题: 出差https://www.luogu.com.cn/problem/P8802 题目描述 AA …

专利申请与论文发表有什么区别

一、背景 专利申请和发表期刊论文是科研成果两种不同的保护与传播方式,它们的主要区别在于: 1. 目的与性质: - **专利申请**:主要目的是获得对发明创造的法律保护,确保发明人在一定时期内(如发明专利通…

数据工程工程师学习路线图

数据工程岗位要求 Skill Sets required: - Hands on experience enabling data via Adobe Analytics and/or Google Analytics - Understanding of how customer level data is captured and stitched with behavioural data - Experience working with Testing (QA) and D…

复旦大学最新研究:如何让大模型敢回答“我不知道”?

引言:AI助手的真实性挑战 在人工智能(AI)的发展进程中,基于大型语言模型(LLMs)的AI助手已经在多个任务中展现出惊人的性能,例如对话、解决数学问题、编写代码以及使用工具。这些模型拥有丰富的…

【设计模式】springboot3项目整合模板方法深入理解设计模式之模板方法(Template Method)

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:底层原理高级进阶》 &#x1f680…

C#使用密封类密封用户信息

目录 一、涉及到的知识点 1.密封类定义 2.何时使用密封类 3.使用密封类的注意事项 二、实例1 三、实例2 1.源码 2.生成效果 在C#中,密封类(sealed class)是一种不能被其他类继承的类。它用于防止其他类继承它的功能和属性。 一、涉…

键盘重映射禁用 CtrlAltDel 键的利弊

目录 前言 一、Scancode Map 的规范 二、禁用 CtrlAltDel 的方法及其缺陷 三、编程实现和测试 3.1 C 实现的简易修改工具 3.2 C# 实现的窗口工具 四、总结 本文属于原创文章,转载请注明出处: https://blog.csdn.net/qq_59075481/article/details…

如何才能学好JVM?——零基础入门篇

1. JVM是什么? JVM是Java Virtual Machine的简称,它是一个虚拟的计算机,专门为执行Java程序而设计。 你可以想象它是一个能够运行Java字节码的平台,无论你的程序在Windows、Mac还是Linux上,它们都能通过JVM在这些系统…

单调队列优化DP问题

目录 1.滑动窗口 2.最大子序和 3.旅行问题 4.烽火传递 5.绿色通道 6.修剪草坪 7.理想的正方形 1.滑动窗口 154.给定一个大小为 n≤106 的数组。 有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向…

RBF神经网络中的RBF的英文全称是什么,是用来干什么的?

问题描述:RBF神经网络中的RBF的英文全称是什么,是用来干什么的? 问题解答: RBF神经网络中的RBF是径向基函数(Radial Basis Function)的缩写。径向基函数是一种在机器学习和模式识别中常用的函数类型&…

Peter算法小课堂—区间模型

Peter Pan来啦…… 最大不重叠区间数 二话不说,先来一道题 大家想想怎么贪心?我们可以将每一个美食摊位抽象成一个区间,区间左端点为开始排队时间,右端点为结束排队时间。其中,时间信息可以用数轴表示。 额……我们…

【Spring MVC篇】Cookie和Session的获取 Header的获取

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌 Cookie是客户端保存用…

【知识整理】产研中心岗位评定标准之测试岗位

为贯彻执行集团数字化转型的需要,该知识库将公示集团组织内各产研团队不同角色成员的职务“职级”岗位的评定标准; 一、定级定档目的 通过对公司现有岗位及相应岗位员工的工作能力、工作水平进行客观公正评定,确定各岗位的等级及同等级岗位员工对应的档级,从而为员工以后的晋升…

M3芯片支持追光效果吗?苹果电脑上值得玩的游戏大作有什么? Mac电脑热门游戏推荐 苹果电脑玩幻兽帕鲁 crossover软件安装

M3是苹果最新发布的芯片,它采用了业界领先的3纳米工艺,能够提供更快的速度和更高的能效。苹果电脑是一种高端的个人电脑,它也有着不少优秀的游戏大作,能够给玩家带来不同的游戏体验。那么,M3支持追光效果吗&#xff1f…

【AutoML】AutoKeras 进行 RNN 循环神经网络训练

由于最近这些天都在人工审查之前的哪些问答数据,所以迟迟都没有更新 AutoKeras 的训练结果。现在那部分数据都已经整理好了,20w 的数据最后能够使用的高质量数据只剩下 2k。这 2k 的数据已经经过数据校验并且对部分问题的提问方式和答案内容进行了不改变…

前端秘法引言(配置vscode, 以及html的基础)

目录 一.配置环境vscode 二.配置插件 三.vscode的实用小技巧 四.标题段落换行标签 五.格式化标签 一.配置环境vscode vscode官网https://code.visualstudio.com/ 点击右上角的download 根据不同的操作系统进行下载安装,我这里选的是Windows x64 安装好后打开,点击左上角的…