matplotlib多子图共享坐标轴

2024-02-01 10:12

本文主要是介绍matplotlib多子图共享坐标轴,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 共用坐标
    • 添加共享轴
    • 灰度直方图

共用坐标

当一个图像中有多个子图时,若这些子图坐标的含义相同,那么省略一些坐标可以让图像更加简洁。在matplotlib中,通过sharex或者sharey可以起到共享x或y轴坐标的作用。示例如下

import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-5,5,100)
ys = [np.sin(x+i) for i in range(5)]fig,axes = plt.subplots(2,2,sharex=True, sharey=True)axes = axes.reshape(-1)
for i in range(4):axes[i].plot(x, ys[i])plt.show()

效果如下,左上角的子图没有x刻度值,右下角则没有y刻度值,右上角则什么坐标轴也没有。

在这里插入图片描述

添加共享轴

直接通过subplots来创建图窗和坐标轴,尽管用一行代码解决了很多问题,但相应地也不够灵活,而灵活添加坐标轴的函数add_subplot也有sharex和sharey的参数,但二者并不是布尔型参数,而是需要输入希望共享的坐标轴。

fig = plt.figure()
ax3 = fig.add_subplot(223)
ax3.plot(x,ys[2])ax1 = fig.add_subplot(221, sharex=ax3)
ax1.plot(x[:50],ys[0][:50])ax4 = fig.add_subplot(224, sharey=ax3)
ax4.plot(x[50:],ys[3][50:])ax2 = fig.add_subplot(222, sharex=ax4, sharey=ax1)
ax2.plot(x,ys[1])plt.show()

效果如下,一方面,从各坐标轴的坐标来看,的确实现了坐标共享,但并没有像subplots中一样,直接隐藏不必要的坐标刻度。

在这里插入图片描述

为了达到和subplots相同的效果,需要手动隐藏坐标刻度,如将代码改为下面的形式,即可实现目标

fig = plt.figure()
ax3 = fig.add_subplot(223)
ax3.plot(x,ys[2])ax1 = fig.add_subplot(221, sharex=ax3)
ax1.plot(x[:50],ys[0][:50])
ax1.tick_params(axis="x", labelbottom=False)ax4 = fig.add_subplot(224, sharey=ax3)
ax4.plot(x[50:],ys[3][50:])
ax4.tick_params(axis="y", labelleft=False)ax2 = fig.add_subplot(222, sharex=ax4, sharey=ax1)
ax2.plot(x,ys[1])
ax2.tick_params(axis="x", labelbottom=False)
ax2.tick_params(axis="y", labelleft=False)plt.show()

灰度直方图

上面示例中那几个子图,彼此之间区别不大,放在一张图中是完全没问题的,但有些情况则不适合放在一张图中,比如对于一张图片来说,想知道其水平方向上灰度强度的分布,就比较适合坐标。

path = r'lena.jpg'
img = plt.imread(path)xs = [np.sum(img[:,:,i],0) for i in range(3)]
ys = [np.sum(img[:,:,i],1) for i in range(3)]fig = plt.figure()
gs = fig.add_gridspec(2, 2,width_ratios=(4, 1),height_ratios=(1, 4))ax = fig.add_subplot(gs[1, 0])
ax.imshow(img)        # 散点图绘制
plt.axis('off')xHist = fig.add_subplot(gs[0, 0], sharex=ax)
xHist.tick_params(axis="x", labelbottom=False)yHist = fig.add_subplot(gs[1, 1], sharey=ax)
yHist.tick_params(axis="y", labelleft=False)colors = 'rgb'
for i in range(3):xHist.plot(xs[i], color=colors[i])yHist.plot(ys[i], np.arange(len(ys[i])),color=colors[i])plt.show()

由于lena图有3个通道,所以在对每行或者每列像素求和时,选择分别对三个通道进行操作。而后在绘制曲线时,对三个通道的值也使用了不同的颜色方案。通过tick_params函数,取消了上图底部和右图左侧的坐标刻度。

最后得图如下

在这里插入图片描述

这篇关于matplotlib多子图共享坐标轴的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666944

相关文章

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四: