python画图|坐标轴显隐设置

【1】引言

前序学习中,已经发现坐标轴的显示具有至关重要的影响,因此今天继续探索相关技巧:坐标轴显隐设置。

前序学习内容可通过下述链接直达:

python画图| 对齐图名和标签-CSDN博客

【2】官网教程

点击下方链接可以直达官网教程:

https://matplotlib.org/stable/gallery/spines/spines.html#sphx-glr-gallery-spines-spines-py

官网教程里面的关键词spines可以理解为坐标轴,而坐标轴上显示数字旁边凸出的小短线一般用tick来表示

运行官网程序,获得的图像为图1,图1中圈出了部分spines上的tick:

图1

刚好以图1为基准,我们尝试辨析三个子图的不同:

【a】第一个图形的上下左右轴都显示;

【b】第二个图形只显示左轴和下轴;

【c】第三个图形只显示左轴和下轴,但是X轴只显示和自变量对应的区域,左轴和下轴不交叉。

为追溯这种不同的来源,我们需要读懂程序。

【3】代码解读

首先是引入画图和计算模块:

import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块

然后是完成变量定义:

x = np.linspace(0, 2 * np.pi, 100) #定义自变量
y = 2 * np.sin(x) #定义因变量

然后定义要画图:

fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, layout='constrained') #定义要画图

然后先按照默认方式画第一个图,第一个图的坐标轴是完整的:

ax0.plot(x, y) #画第一个图形
ax0.set_title('normal spines') #命名第一个图形ax1.plot(x, y) #画第二个图形
ax1.set_title('bottom-left spines') #命名第二个图形# Hide the right and top spines
ax1.spines.right.set_visible(False) #不显示第二个图形的右侧坐标轴
ax1.spines.top.set_visible(False) #不显示第二个图形的上侧坐标轴

但第二个图就约定了不显示右轴和上轴,通过spines.right.set_visible(False)和top.set_visible(False)实现

ax1.spines.right.set_visible(False) #不显示第二个图形的右侧坐标轴 ax1.spines.top.set_visible(False) #不显示第二个图形的上侧坐标轴

然后输出第三个图形,第三个图形的轴输出范围通过 ax2.spines.bottom.set_bounds(x.min(), x.max()) 和ax2.spines.left.set_bounds(y.min(), y.max()) 进行控制

ax2.plot(x, y)  #命名第三个图形
ax2.set_title('spines with bounds limited to data range') #命名第三个图形# Only draw spines for the data range, not in the margins
ax2.spines.bottom.set_bounds(x.min(), x.max())  #设置第三个图形的下侧坐标轴,使其刚好和自变量对应
ax2.spines.left.set_bounds(y.min(), y.max())  #设置第三个图形的左侧坐标轴,使其刚好和因变量对应
# Hide the right and top spines
ax2.spines.right.set_visible(False) #不显示第三个图形的右侧坐标轴
ax2.spines.top.set_visible(False) #不显示第三个图形的上侧坐标轴

最后输出图形:

plt.show() #输出图形

至此的完整代码为:

import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块x = np.linspace(0, 2 * np.pi, 100) #定义自变量
y = 2 * np.sin(x) #定义因变量# Constrained layout makes sure the labels don't overlap the Axes.
fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, layout='constrained') #定义要画图ax0.plot(x, y) #画第一个图形
ax0.set_title('normal spines') #命名第一个图形ax1.plot(x, y) #画第二个图形
ax1.set_title('bottom-left spines') #命名第二个图形# Hide the right and top spines
ax1.spines.right.set_visible(False) #不显示第二个图形的右侧坐标轴
ax1.spines.top.set_visible(False) #不显示第二个图形的上侧坐标轴ax2.plot(x, y)  #命名第三个图形
ax2.set_title('spines with bounds limited to data range') #命名第三个图形# Only draw spines for the data range, not in the margins
ax2.spines.bottom.set_bounds(x.min(), x.max())  #设置第三个图形的下侧坐标轴,使其刚好和自变量对应
ax2.spines.left.set_bounds(y.min(), y.max())  #设置第三个图形的左侧坐标轴,使其刚好和因变量对应
# Hide the right and top spines
ax2.spines.right.set_visible(False) #不显示第三个图形的右侧坐标轴
ax2.spines.top.set_visible(False) #不显示第三个图形的上侧坐标轴plt.show() #输出图形

【4】代码修改

在第二个图形中,只输出了左轴和右轴,现在尝试只输出右轴和上轴:

ax1.spines.right.set_visible(True) #不显示第二个图形的右侧坐标轴
ax1.spines.top.set_visible(True) #不显示第二个图形的上侧坐标轴
ax1.spines.left.set_visible(False) #不显示第二个图形的右侧坐标轴
ax1.spines.bottom.set_visible(False) #不显示第二个图形的上侧坐标轴

图2

由图2可见,第二个子图只显示了右侧和上侧坐标轴,但是轴标签依然保留在左侧和下侧,因此相关代码有必要跟随修改

ax1.tick_params(top='on',bottom=[],left=[],right='on')
ax1.tick_params(labeltop='on',labelbottom=[],labelleft=[],labelright='off')

细心的读者会发现, labelright='off'一般的结果应该是不显示标签值,但实际运行结果却是显示,如图3。

图3

为此继续修改,将labelleft也设置一个值:

ax1.tick_params(top='on',bottom=[],left=[],right='on')
ax1.tick_params(labeltop='on',labelbottom=[],labelleft='dfgh',labelright='off')

运行程序获得的图像为:

图4

 由图4可见:只要ax1.tick_params()函数中的子项如labelleft的值不是“[ ]”,那就回输出结果。

为此追溯官网:

https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.tick_params.html#matplotlib.axes.Axes.tick_params

其实这里没有细节描写,所以自己多做尝试显得尤为重要。

至此的完整代码为:

import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块x = np.linspace(0, 2 * np.pi, 100) #定义自变量
y = 2 * np.sin(x) #定义因变量# Constrained layout makes sure the labels don't overlap the Axes.
fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, layout='constrained') #定义要画图ax0.plot(x, y) #画第一个图形
ax0.set_title('normal spines') #命名第一个图形ax1.plot(x, y) #画第二个图形
ax1.set_title('bottom-left spines') #命名第二个图形# Hide the right and top spines
ax1.spines.right.set_visible(True) #不显示第二个图形的右侧坐标轴
ax1.spines.top.set_visible(True) #不显示第二个图形的上侧坐标轴
ax1.spines.left.set_visible(False) #不显示第二个图形的右侧坐标轴
ax1.spines.bottom.set_visible(False) #不显示第二个图形的上侧坐标轴
ax1.tick_params(top='on',bottom=[],left=[],right='on')
ax1.tick_params(labeltop='on',labelbottom=[],labelleft='dfgh',labelright='off')ax2.plot(x, y)  #命名第三个图形
ax2.set_title('spines with bounds limited to data range') #命名第三个图形# Only draw spines for the data range, not in the margins
ax2.spines.bottom.set_bounds(x.min(), x.max())  #设置第三个图形的下侧坐标轴,使其刚好和自变量对应
ax2.spines.left.set_bounds(y.min(), y.max())  #设置第三个图形的左侧坐标轴,使其刚好和因变量对应
# Hide the right and top spines
ax2.spines.right.set_visible(False) #不显示第三个图形的右侧坐标轴
ax2.spines.top.set_visible(False) #不显示第三个图形的上侧坐标轴plt.show() #输出图形

【5】代码完善

在前序学习中,已经基本掌握坐标轴共享的技巧,就以共享X轴为目标,参考下述文章:

python画图| 对齐图名和标签-CSDN博客

设置代码:

fig, (ax0, ax1, ax2) = plt.subplots(nrows=3,layout='constrained', sharex=True) #定义要画图

获得的输出图形为:

图5

由图5可见,隐X轴共享,只在最底下显示X轴范围。

继续设置图形颜色和线型增加对比度:

图6

【6】总结

通过ax.spines.top/left/right/bottom.set_visible(True/False)()函数ax.tick_params()函数实现坐标轴显隐设置。

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

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

相关文章

react 基础学习笔记

1.react 语法 ①数据渲染 函数组件将HTML结构直接写在函数的返回值中 JSX只能有一个根元素 JSX插值写法 插值可以使用的位置 1.标签内容; 2.标签属性 JSX 条件渲染:三目运算符; JSX根据数据进行列表渲染:map()方法&#x…

【读书笔记-《网络是怎样连接的》- 2】Chapter2_1-协议栈通信详细过程

第二章从协议栈这部分来看网络中的通信如何实现,准备从两部分来进行分解。本篇是第一部分:详细介绍TCP协议栈收发数据的过程。 首先来看下面的图。从应用程序到网卡需要经过如下几部分,上面的部分通过委托下面的部分来完成工作。首先是应用程…

Windows 10、Office 2016/2019 和 PPTP 和 L2TP协议即将退役,企业应尽早做好准备

关心微软技术和产品的朋友一定对这个网站很熟悉:https://microsoftgraveyard.com/,这里静静的躺着很多微软技术和产品。近日,微软又在准备一场新的“告别仪式”了,这次是 Windows 10、Office 2016/2019 和一些老旧的协议与技术。让…

Apache Seata 新版本集成了 RocketMQ 事务消息

大家好,我是君哥。 Apache Seata 是一款高性能、简单易用的分布式事务中间件,它包含 AT、TCC、SAGA 和 XA 四种模式。 在最近发布的新版本中,Apache Seata 引入了 RocketMQ 中间件,并且跟 RocketMQ 的事务消息配合使用。今天我们…

Vue Router实现路由懒加载

为了提高页面的加载速度,我们可以使用Vue Router的路由懒加载功能。路由懒加载是什么呢,路由懒加载就是只有当访问某个路由的时候再加载其相应的页面。 官方文档地址https://router.vuejs.org/guide/advanced/lazy-loading.html 以前我写路由懒加载的时候…

详细教程:使用Grafana监控Mysql

什么是Grafana Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展 示,并及时通知。 下载Grafana 下载地址: https://grafana.com/grafana/download [rootgrafana ~]# wget https://dl.grafana.com/oss/relea…

qt QPushButton详解

QPushButton是Qt Widgets模块中的一个基本控件,用于提供可点击的按钮。它是用户界面中最为常见和常用的控件之一,通过点击按钮,用户可以触发特定的应用程序操作。 重要方法 QPushButton(const QIcon &icon, const QString &text, QWi…

【OpenAI】第五节(图像生成)利用 OpenAI 的 DALL·E 实现自动化图像生成:从文本到图像的完整教程

引言 OpenAI 推出的 DALLE 工具因其能够生成令人惊叹的艺术作品而备受瞩目。DALLE 不仅能够生成静态图像,还能根据用户的需求进行风格化处理,创造出独特的艺术作品。通过 OpenAI 的 API,你可以轻松将 DALLE 的强大功能集成到你的 Python 程序…

《分布式机器学习模式》:解锁分布式ML的实战宝典

在大数据和人工智能时代,机器学习已经成为推动技术进步的重要引擎。然而,随着数据量的爆炸性增长和模型复杂度的提升,单机环境下的机器学习已经难以满足实际需求。因此,将机器学习应用迁移到分布式系统上,成为了一个不…

Xcode16 编译运行YYCache iOS18 sqlite3_finalize 闪退问题解决方案

问题原因 升级Xcode 16 之后,真机运行APP,发现会有Crash,崩溃堆栈线上Crash 在 YYCache 之中。如下图所示 崩溃堆栈如下: * thread #1, queue com.apple.main-thread, stop reason signal SIGABRTframe #0: 0x00000001d9391…

免费开源Odoo软件如何实现电商仓库高效发货

世界排名第一的免费开源ERP软件Odoo,拥有非常强大的仓库管理WMS功能。本文以电商仓库发货管理为例,介绍电商订单的仓库发货作业的各种方法。电商订单仓库发货流程,通常分为三个步骤,即拣货、打包、发货。根据仓库日处理订单数量的…

九、pico+Unity交互开发——触碰抓取

一、VR交互的类型 Hover(悬停) 定义:发起交互的对象停留在可交互对象的交互区域。例如,当手触摸到物品表面(可交互区域)时,视为触发了Hover。 Grab(抓取) 概念&#xff…

京东笔试题

和谐敏感词 🔗 题目地址 🎉 模拟 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();String s scanner.next();String[] words new String[…

【毕业设计】基于SpringBoot的网上商城系统

前言 🔥本系统可以选作为毕业设计,运用了现在主流的SSM框架,采用Maven来帮助我们管理依赖,所选结构非常合适大学生所学的技术,非常合适作为大学的毕业设计,难以适中。 🔥采用技术:Sp…

C++:模板(2)

目录 非类型模板参数 模板的特化 概念 函数模板特化 类模板特化 全特化 偏特化 模板的分离编译 分离编译的概念 模板的分离编译 ​编辑 模板总结 非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参:在模板参数列表中,跟在class…

HttpURLConnection构造请求体传文件

HttpURLConnection构造请求体传文件 在Java中,使用HttpURLConnection构造请求体传输文件,你需要做以下几步: 1、创建URL对象指向你想要请求的资源。 2、通过URL打开连接,转换为HttpURLConnection实例。 3、设置请求方法为POST。 …

GB/T28181-2022规范解读、应用场景和技术实现探究

GB/T28181-2022和GB/T28181-2016区别 GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》与 GB/T28181-2016 相比,主要有以下区别: 术语和定义方面: 术语删减:GB/T28181-2022 删除了 “联网系统信息”“数…

Win安装Redis

目录 1、下载 2、解压文件并修改名称 3、前台简单启动 4、将redis设置成服务后台启动 5、命令启停redis 6、配置文件设置 1、下载 【下载地址】 2、解压文件并修改名称 3、前台简单启动 redis-server.exe redis.windows.conf 4、将redis设置成服务后台启动 redis-server -…

pikachu靶场CSRF-post测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、抓包使用burp生成csrf脚本 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机:本机(127.0.0.1) 靶 机:本机(127.0.0.1) 2、使用工具/软件 Burp sui…

老机MicroServer Gen8再玩 OCP万兆光口+IT直通

手上有一台放了很久的GEN8微型服务器,放了很多年,具体什么时候买的我居然已经记不清了 只记得开始装修的时候搬家出去就没用了,结果搬出去有了第1个孩子,孩子小的时候也没时间折腾,等孩子大一点的时候,又有…