Python画图|多图共享X轴和Y轴

【1】引言

在python画图的众多场景中,存在多图对应X轴和Y轴可能一致的情形。

为此,尝试找到相关方法,不仅可以将代码写得更简洁,也更节省电脑内存,是提升工作效率的可选之路。

【2】官网教程

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

Shared axis — Matplotlib 3.9.2 documentation

官网教程非常简洁,我尝试对其进行了注释。

【3】代码解析

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

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

然后定义了自变量和因变量:

t = np.arange(0.01, 5.0, 0.01) #定义自变量
s1 = np.sin(2 * np.pi * t) #定义因变量
s2 = np.exp(-t) #定义因变量
s3 = np.sin(4 * np.pi * t) #定义因变量

这里的3个因变量将输出3个子图。

接下来先输出第一个图形:

ax1 = plt.subplot(311) #输出第一个图形
plt.plot(t, s1) #画图
plt.tick_params('x', labelsize=6) #设置X轴范围

然后在定义第二个图形的时候,指明要和第一个图形共享X轴:sharex=ax1

# share x only
ax2 = plt.subplot(312, sharex=ax1) #输出第二个图形,共享第一个图像的X轴
plt.plot(t, s2) #画图
# make these tick labels invisible
plt.tick_params('x', labelbottom=False) #设置图形,不显示X轴内容

再之后定义第三个图形, 指明要和第一个图形共享X轴和Y轴:sharex=ax1,sharey=ax1

# share x and y
ax3 = plt.subplot(313, sharex=ax1, sharey=ax1) #输出第三个图形,共享第一个图像的X轴和Y轴
plt.plot(t, s3) #画图
plt.xlim(0.01, 5.0) #限制X轴范围

最后输出图形:

plt.show() #输出图形

至此的输出图像为:

图1

完整代码为:

import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块t = np.arange(0.01, 5.0, 0.01) #定义自变量
s1 = np.sin(2 * np.pi * t) #定义因变量
s2 = np.exp(-t) #定义因变量
s3 = np.sin(4 * np.pi * t) #定义因变量ax1 = plt.subplot(311) #输出第一个图形
plt.plot(t, s1) #画图
plt.tick_params('x', labelsize=6) #设置X轴范围# share x only
ax2 = plt.subplot(312, sharex=ax1) #输出第二个图形,共享第一个图像的X轴
plt.plot(t, s2) #画图
# make these tick labels invisible
plt.tick_params('x', labelbottom=False) #设置图形,不显示X轴内容# share x and y
ax3 = plt.subplot(313, sharex=ax1, sharey=ax1) #输出第三个图形,共享第一个图像的X轴和Y轴
plt.plot(t, s3) #画图
plt.xlim(0.01, 5.0) #限制X轴范围
plt.show() #输出图形

【4】代码修改

【4.1】设置子图名称

由于图1中没有给任何子图命名,且第一个和第三个子图都显示了X轴,为了优化表达效果,先给各个子图命名,增加如下代码:

ax1.set_title('s1')
ax2.set_title('s2')
ax3.set_title('s3')

获得输出结果为:

图2

可见每个子图上都有了名称。

【4.2】只显示最底下的X轴标签内容

现在进一步优化代码,把S1的X轴标签去除。

此处采用的方法是,增加labelbottom=False代码,增加后:

ax1 = plt.subplot(311) #输出第一个图形
plt.plot(t, s1) #画图
plt.tick_params('x', labelsize=6,labelbottom=False) #设置X轴范围

此时的输出结果为:

图3

由图3可见,S1不再显示X轴标签内容。

【4.3】显示最底下的X轴和各Y轴

继续增加代码,显示最底下的X轴和各Y轴:

ax1.set_ylabel('s1')
ax2.set_ylabel('s2')
ax3.set_ylabel('s3')
ax3.set_xlabel('X')

此时的输出结果为:

图4

由图4可见,各个子图的表达已经更加完善。

此时的完整代码为:

import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块t = np.arange(0.01, 5.0, 0.01) #定义自变量
s1 = np.sin(2 * np.pi * t) #定义因变量
s2 = np.exp(-t) #定义因变量
s3 = np.sin(4 * np.pi * t) #定义因变量ax1 = plt.subplot(311) #输出第一个图形
plt.plot(t, s1) #画图
plt.tick_params('x', labelsize=6,labelbottom=False) #设置X轴范围# share x only
ax2 = plt.subplot(312, sharex=ax1) #输出第二个图形,共享第一个图像的X轴
plt.plot(t, s2) #画图
# make these tick labels invisible
plt.tick_params('x', labelbottom=False) #设置图形,不显示X轴内容# share x and y
ax3 = plt.subplot(313, sharex=ax1, sharey=ax1) #输出第三个图形,共享第一个图像的X轴和Y轴
plt.plot(t, s3) #画图
plt.xlim(0.01, 5.0) #限制X轴范围ax1.set_title('s1') #设置图名
ax2.set_title('s2') #设置图名
ax3.set_title('s3') #设置图名ax1.set_ylabel('s1') #设置Y轴
ax2.set_ylabel('s2') #设置Y轴
ax3.set_ylabel('s3') #设置Y轴
ax3.set_xlabel('X') #设置X轴plt.show() #输出图形

【5】代码优化

其实共享X轴更为简洁的方式是将所有图形画到同一个坐标系。

删除所有ax定义,替换为下述代码:

plt.plot(t, s1,'o--',label='s1') #画图
plt.plot(t,s2,'--',label='s2') #画图
plt.plot(t,s3,label='s3') #画图
plt.xlabel('X') #设置X轴
plt.ylabel('Y') #设置Y轴
plt.legend() #输出图例

此时的输出结果为:

图5

 图5显然比之前的图形都更紧凑,展示内容也更集中。

当然,图5的选用应在曲线范围一致的情况下才有好的效果,不然还是需要回到之前的子图形式。

至此的完整代码为:

import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块t = np.arange(0.01, 5.0, 0.01) #定义自变量
s1 = np.sin(2 * np.pi * t) #定义因变量
s2 = np.exp(-t) #定义因变量
s3 = np.sin(4 * np.pi * t) #定义因变量plt.plot(t, s1,'o--',label='s1') #画图
plt.plot(t,s2,'--',label='s2') #画图
plt.plot(t,s3,label='s3') #画图
plt.xlabel('X') #设置X轴
plt.ylabel('Y') #设置X轴
plt.legend() #输出图例plt.show() #输出图形

【6】总结

探索了多图共享X轴和Y轴的基本技巧,并对输出图形进行了图例、轴标签等属性设置,最后将所有曲线集中到一个坐标轴内部输出。

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

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

相关文章

制造已然走出国门,数据如何走向全球?

1 行业趋势和背景 1.1 海外全球化——由中国制造到中国品牌全球造的全球化布局 为实现资源的最优配置、效率的最大化,现在越来越多的制造业企业,凭借着自己的品牌力和技术能力,进行全球化布局,加速从原来的“中国制造”到“中国…

EISS_2024企业信息安全峰会:《货拉拉信息安全实践》学习笔记

EISS_2024企业信息安全峰会:《货拉拉信息安全实践》 企业安全目标设定和安全框架企业信息安全组织和机制技术体系建设方法信息安全指标建设构建安全数据和体系技术体系支撑合规治理安全融入企业体系内建文化,外建生态 企业安全目标设定和安全框架 要点&a…

门店展台客流量摄像机功能:准确计数、行为分析、客流趋势预测

在车展展厅中,门店展台客流量摄像机发挥着至关重要的作用,其功能涵盖准确计数、行为分析和客流趋势预测等多个方面。 一、车展展厅应用客流统计方案原因 1. 评估展会效果:准确了解每个展台的客流量,判断展会的吸引力和热度&#…

Linux相关概念和易错知识点(14)(进程终止、进程退出、退出信息)

1.进程终止 &#xff08;1&#xff09;错误码 对于程序常见错误信息&#xff0c;C/C提供了信息解释&#xff0c;保存在<string.h>&#xff0c;使用strerror(错误码)就可以查询 错误信息成立的前提是错误码要和错误信息匹配&#xff0c;我们需要结合C/C给我们的错误码来…

极狐GitLab X 某轨道交通控制系统龙头企业,助力业务研发敏捷化

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 60天专业…

java多态-cnblog

java多态 细分的重载会增加代码量&#xff0c;降低易用程度 定义一个类&#xff0c;继承所有类的对象&#xff0c;根据向上转型可以让每个类的对象都调用初始类的方法&#xff0c;在方法中设置判断&#xff0c;不同的对象导致方法做不同的事&#xff0c;这就是多态 写一个灯…

计算机的错误计算(一百一十九)

摘要 用错数解释计算机的错误计算&#xff08;一百一十八&#xff09;中的错误计算。 计算机的错误计算&#xff08;一百一十八&#xff09;给出一个循环迭代 用C语言或Java编程计算&#xff0c;则 均是错误结果。 下面用错数解释其出错原因。 首先&#xff0c;将迭代看作 …

SSM(5)(动态sql <if>、<where>、返回主键值)

返回主键值&#xff1a; 方法一&#xff1a; useGeneratedKeys 为ture 声明 返回主键 keyProperty 表示要返回的值 封装到对象的属性中 但是这一种方法不支持Orcal数据库。 <insert id"save2" parameterType"com.findyou.entity.User" useGenerated…

【JVM系列】深入理解Java虚拟机(JVM)的核心技术 :从静态到运行时的秘密(三、Java常量池揭秘)

文章目录 【JVM系列】深入理解Java虚拟机&#xff08;JVM&#xff09;的核心技术 &#xff1a;从静态到运行时的秘密(二、Java常量池揭秘)1. 基本概念2. 常量池分类2.1 运行常量池2.2 静态常量池2.3 字符串常量池 3. String 类3.1 创建String对象的两种方式和区别3.2 字符串的特…

【Unity】背景图片随着背景里面内容大小而变化

今天制作项目里面的设置界面和暂停界面时&#xff0c;发现两个界面有很多重复部分&#xff0c;所以直接做一个界面就行了&#xff0c;但是两个界面的背景大小会有变化&#xff0c;图片在下面 这个是游戏暂停界面的&#xff0c;设置界面和这个界面有很多重复地方&#xff0c;仅仅…

Spring事务的1道面试题

每次聊起Spring事务&#xff0c;好像很熟悉&#xff0c;又好像很陌生。本篇通过一道面试题和一些实践&#xff0c;来拆解几个Spring事务的常见坑点。 原理 Spring事务的原理是&#xff1a;通过AOP切面的方式实现的&#xff0c;也就是通过代理模式去实现事务增强。 具体过程是…

【网页设计】CSS Part2

目标 能使用 emmet 语法能够使用 CSS 复合选择器能够写出伪类选择器的使用规范能够说出元素有几种显示模式能够写出元素显示模式的相互转换代码能够写出背景图片的设置方式能够计算 CSS 的权重 1. Emmet 语法 Emmet语法的前身是Zen coding,它使用缩写,来提高html/css的编写速…

java继承-cnblog

类的继承 继承本身 一个类要继承另一个类需要使用关键字extends 关键字extends的使用 class a extend b{}由于java只支持单继承&#xff0c;所以同时继承多个父类是错误的 在创造子类对象时&#xff0c;会先执行父类的构造方法&#xff0c;再执行子类的构造方法 举例说明 …

用 logfire 提高应用的可观测性

Logfire是由 Pydantic 团队打造的平台, 还有供 app 使用的 library, 我们经常提到对应用要做 LMT(Log, Metrics, Trace), Logfire 可以用来收集、存储、分析和可视化日志数据和应用性能指标。通过集成日志和度量&#xff0c;Logfire 提供了一个统一的界面来管理应用程序和系统的…

Windows环境mysql 9安装mysqld install报错:Install/Remove of the Service Denied!

Windows环境mysql 9安装mysqld install报错&#xff1a;Install/Remove of the Service Denied! 解决方案&#xff1a; 控制台/批处理命令窗口需要以系统管理员身份运行。 mysql数据库环境配置和安装启动&#xff0c;Windows-CSDN博客文章浏览阅读920次。先下载mysql的zip压缩…

ChatTTS 本地安装和测试

Ubuntu 22服务器&#xff0c;3.9/3.10都可以&#xff0c;但是 3.11不可以 sudo apt install python3.10 apt install python3.10 python3.10-dev #ubuntu 22 安装python3.10对应的pip3.10 # 下载 get-pip.py curl -sS https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 使…

干货分享:Air780E选型的注意事项

Air780E已经是个明星模组了&#xff0c;累计出货数量2000万&#xff0c;广泛应用于物联网各行业。 今天计划讲一讲选择Air780E的注意事项&#xff01;从用户的角度&#xff0c;解答大家对Air780E这款模组最关心的问题&#xff0c;更多从选型、应用等非技术维度展开。 选择Air…

Spring Boot洗衣店订单系统:业务流程优化

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

算法-依据先序遍历和中序遍历构建二叉树

简单的二叉树遍历算法&#xff0c; 为了通过给定的先序遍历&#xff08;preorder&#xff09;和中序遍历&#xff08;inorder&#xff09;数组构造二叉树&#xff0c;我们需要理解这两种遍历方式的特点&#xff1a; 先序遍历&#xff08;Preorder&#xff09;&#xff1a;首先…

如何高效部署SD-WAN及是否需要路由器?

随着SD-WAN&#xff08;软件定义广域网&#xff09;的快速普及&#xff0c;企业在构建网络架构时迎来了更多灵活和高效的管理方式。但在决定是否仍需部署物理路由器时&#xff0c;关键在于企业的具体网络需求与架构特点。 SD-WAN的最大特点是其通过虚拟化技术来实现网络管理。通…