解决matplotlib画图去除非常多的白色边框

news2024/11/18 7:47:04

文章目录

  • 解决matplotlib画图去除非常多的白色边框
    • 本文说明
    • 为什么matplotlib画图会默认有很多白色边框?
    • 绘图
      • 默认绘图
      • 去除白边方法一,修改保存图像的代码
        • 取消白边
        • 略微增加白边
      • 去除白边方法二,修改显示图像的代码
    • 总结

解决matplotlib画图去除非常多的白色边框

本文说明

本博文旨在说明为什么plt绘图会存在很多白边,并且给出如何去除白边的方法。

为什么matplotlib画图会默认有很多白色边框?

Matplotlib 的默认行为是在图像周围留出一些空白边框,以确保图像的完整性和可读性。这些边框被称为 “whitespace”,也称为 “padding” 或 “margin”。

默认情况下,Matplotlib 在创建 Figure 对象时会为其添加一些默认的空白边框。这些边框可以通过调整 Figure 对象的大小和位置来控制。在使用 “subplots” 方法创建多个子图时,Matplotlib 会自动计算每个子图的位置和大小,并添加适当的空白边框,以保证子图之间有足够的间距和边框。

绘图

我们使用如下两幅图作为例子。
在这里插入图片描述
在这里插入图片描述

默认绘图

默认绘图如下,使两幅图在一个画框中显示。

import cv2
import matplotlib.pyplot as plt

# 读取图像并将其转换为 RGB 颜色空间
img_1 = cv2.imread('img.png')
img_1 = cv2.cvtColor(img_1, cv2.COLOR_BGR2RGB)

img_2 = cv2.imread('soft.png')
img_2 = cv2.cvtColor(img_2, cv2.COLOR_BGR2RGB)

# 创建一个包含两个子图的 Figure 对象
fig, axs = plt.subplots(1, 2, figsize=(10, 5))

# 在左侧的子图中显示第一幅图像
axs[0].imshow(img_1)
axs[0].set_title('Blur')

# 在右侧的子图中显示第二幅图像
axs[1].imshow(img_2)
axs[1].set_title('Sharp')

#------------------ 默认保存图像--------------------------------------
plt.savefig('coup.png', dpi=300)

# 显示图像
plt.show()

保存的图像如下所示,我这个是截图展示,否则全部是白屏,看不出白边。

在这里插入图片描述

去除白边方法一,修改保存图像的代码

取消白边

如果有时候图片小,白边占比非常多,我们应该怎么去除呢,实际上很简单,修改默认保存的图像代码就可以了,改为如下所示。

plt.savefig('coup1.png', bbox_inches='tight', pad_inches=0.0, dpi=300)

此代码参数说明:

  • “plt”:表示 matplotlib.pyplot 模块的别名,它包含了许多绘制图形、设置图形属性和保存图形的函数。
  • “savefig”:表示保存图形函数,用于将当前绘制的图形保存为文件。
  • “coup1.png”:表示要保存的文件名,可以是任何有效的文件名,包括路径和扩展名。
  • “bbox_inches=‘tight’”:表示要保存的图像边界框,这里设置为 “tight”,意味着要紧密地裁剪图像周围的空白边距。
  • “pad_inches=0.0”:表示图像周围的空白边距大小,这里设置为 0.0,表示不添加额外的空白边距。
  • “dpi=300”:表示图像的分辨率,这里设置为 300 DPI,即每英寸包含 300 个像素。

此时重新运行代码,即可看到保存的图像如下,白边几乎全部消失,边框紧挨着图像。

在这里插入图片描述

略微增加白边

如果感觉边框又太挤了,可以修改pad_inches参数,可以修改为0.2试一下,修改之后如下所示。可以根据自己的喜好,调整白边的大小以符合自己的要求

在这里插入图片描述

去除白边方法二,修改显示图像的代码

把代码改为如下所示,这个tight_layout会自动调整图像的白边布局,自己试一下把。

import cv2
import matplotlib.pyplot as plt

# 读取图像并将其转换为 RGB 颜色空间
img_1 = cv2.imread('img.png')
img_1 = cv2.cvtColor(img_1, cv2.COLOR_BGR2RGB)

img_2 = cv2.imread('soft.png')
img_2 = cv2.cvtColor(img_2, cv2.COLOR_BGR2RGB)

# 创建一个包含两个子图的 Figure 对象
fig, axs = plt.subplots(1, 2, figsize=(10, 5))

# 在左侧的子图中显示第一幅图像
axs[0].imshow(img_1)
axs[0].set_title('Blur')

# 在右侧的子图中显示第二幅图像
axs[1].imshow(img_2)
axs[1].set_title('Sharp')

#-------------------------下面这一行是新增的--------------------------#
plt.tight_layout()

#------------------ 默认保存图像-------------------------------------#
plt.savefig('coup.png', dpi=300)

# 显示图像
plt.show()

也可以修改tight_layout的参数。

Matplotlib 的 “tight_layout” 方法有一些可选的参数,可以用来调整图像边框的大小和间距。下面是 “tight_layout” 方法的参数列表:

  • pad: 控制子图之间的距离,默认为 1.08。
  • h_pad: 控制水平方向上的子图之间的距离,默认为 0.0。
  • w_pad: 控制垂直方向上的子图之间的距离,默认为 0.0。
  • rect: 可选的参数,用于指定图像的区域,格式为左、下、右、上的四元组,取值范围为 0 到 1。

您可以根据需要制定不同的参数值,以获得适合您的图像的边框大小和间距。以下是一个示例代码:

import cv2
import matplotlib.pyplot as plt

# 读取图像并将其转换为 RGB 颜色空间
blur = cv2.imread('blur_image.jpg')
blur = cv2.cvtColor(blur, cv2.COLOR_BGR2RGB)

sharp = cv2.imread('sharp_image.jpg')
sharp = cv2.cvtColor(sharp, cv2.COLOR_BGR2RGB)

# 在两个子图中显示图像
plt.subplot(121), plt.imshow(blur)
plt.subplot(122), plt.imshow(sharp)

# 调整图像边框的大小和间距
plt.tight_layout(pad=0.4, h_pad=1.0, w_pad=1.0, rect=[0, 0, 0.9, 1])

# 显示图像
plt.show()

在这个代码中,我们使用 “tight_layout” 方法的 “pad” 参数将子图之间的距离设置为 0.4;使用 “h_pad” 和 “w_pad” 参数将水平和垂直方向上的子图间距都设置为 1.0;使用 “rect” 参数将图像区域设置为左边 90% 的位置。您可以根据需要调整这些参数的值,以适应您的图像和显示需求。

请注意,如果您同时使用了 “tight_layout” 和 “subplots_adjust” 方法来调整图像边框大小和间距,可能会导致这些方法的效果相互冲突,因此您需要根据具体情况进行选择和调整。

请注意,调用 “tight_layout” 方法只会调整图像边框的大小,而不会改变图像本身的大小或比例。如果您需要调整图像的比例或大小,可以使用其他的方法或工具实现。

总结

通过本文可以去除plt绘图的白边,也可以根据自己的喜好添加白边的多少。

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

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

相关文章

Maven构建生命周期

目录 Default (Build) 生命周期 命令行调用 Site 生命周期 如何清除本地 Maven 仓库并重新构建项目 Maven 构建配置文件 mvn dependency:purge-local-repository 这个命令是干什么的? mvn clean install这个命令是干什么的? 配置文件激活 1、配…

自从外包三年半,程序员人废了一半

如果不是女朋友和我提分手,我估计现在还没醒悟。大专生,18年通过校招进入湖南某软件公司,干了3年多的CRUD,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企…

HBase入门 修改表字段类型(十一)

一、查询看 自己表的DATA_TYPE select TENANT_ID,TABLE_SCHEM,TABLE_NAME,COLUMN_NAME,COLUMN_FAMILY,DATA_TYPE,TYPE_NAME,COLUMN_SIZE,DECIMAL_DIGITS from system.catalog where TABLE_NAME表名2、修改为varchar类型 upsert into SYSTEM.CATALOG (TENANT_ID,TABLE_SCHEM,TA…

如何高清视频录制?您只需要这样操作!

案例:如何录制画质高清的视频? 【我录制了一个视频课程,上传到网上,但是我录制的视频画质不好,影响观感。有没有支持高清录制的录屏工具?有没有小伙伴可以推荐一下!在线等!】 无论…

ChatGpt与AI交谈的未来到来,你准备好了吗?

ChatGpt已经成为了人工智能领域中的一颗明珠,它可以根据用户提出的问题进行分析和回答,帮助用户解决问题和获取信息。而未来,随着人工智能技术的进一步发展,ChatGpt与AI交谈将成为一种更加普遍和重要的交流方式。你准备好了吗&…

7 文件操作、单元测试、goroutine【Go语言教程】

7 文件操作、单元测试、goroutine【Go语言教程】 1 文件操作 1.1 介绍 os.File 封装所有文件相关操作,File 是一个结构体 常用方法: 打开文件 关闭文件 package mainimport ("fmt""os" )func main(){//打开文件//file又叫做&…

VPGTrans: 10%的成本定制你自己的类GPT-4多模态大模型

作者 | 张傲 最近的多模态(对话)大模型将基于文本的ChatGPT的强大能力扩展到了多模态输入,实现强大的多模态语义理解,比如GPT-4、BLIP-2、Flamingo等。但咱们普通玩家训练一个多模态GPT代价非常昂贵。来自于新加坡国立大学和清华大…

基于SSM框架的核酸检测管理系统

基于SSM框架的核酸检测管理系统 快速查看 基于SSM框架的核酸检测管理系统功能需求开发工具模块相关技术系统相关图片 功能需求 用户模块: 注册功能:普通用户可以访问本系统进行账户注册,个人资料:登录系统对自己的个人资料&…

Parker派克伺服电机有哪些优势特点?如何选型?

一、什么是伺服电机? 伺服电机是一种可以通过控制器精确地控制位置、速度和加速度的电机,主要由电机、编码器和控制器三部分组成,具有高转矩、高精度、快速响应和低转速稳定特性,能够在负载扰动、电压变化及机械特性变化下保持较…

springboot整合邮箱功能二(普通邮件, html邮件, thymleaf邮件)

【SpringBoot整合Email发送邮件】_ζั͡ ั͡空 ั͡ ั͡白�的博客-CSDN博客 https://www.cnblogs.com/erlou96/p/16878192.html#_label1_5 1. 准备工作 1.1 qq邮箱设置 本文默认使用qq邮箱来发送邮件,然后使用一个在线临时邮箱来接收邮件。为了让程序能够通过…

srs one2one,one2many通话环境搭建

一、简介 二、go环境配置 三、srs编译配置 四、信令服务器编译 4.1 signaling8 4.2 web服务器 五、测试 六、附录 官⽅⽂档参考地址:https://github.com/ossrs/srs/wiki/v4_CN_WebRTC#sfu-one-to-one 一、简介 srs的webrtc能力和两个信令服务器不管是逻辑上还是代码…

Linux 进程基础

目录 1、进程的概念 2、进程与线程的区别、进程与程序的区别 2.1 进程与线程的区别 2.2 进程与程序的区别 3、进程相关 shell 命令 3.1 ps 3.3.1 参数说明 3.3.2 结果说明 3.2 pidof 3.3 pstree 3.4 top 3.5 kill 4、进程相关函数 4.1 fork 4.1.1 fork的函数原型…

医院内导航及智能导医,医院导诊图怎么制作?

在大型综合性医院,由于专业分工精细,一个诊疗过程涉及的功能单元往往分布在不同的楼宇、不同楼层的不同位置,再加上多数患者对医院环境不熟悉,导致滞院的时间长、诊疗效率低、患者对服务的满意度下降。为解决这一问题,…

VMware Aria Operations for Logs 8.12 - 集中式日志管理

VMware Aria Operations for Logs 8.12 - 集中式日志管理 请访问原文链接:https://sysin.org/blog/vmware-aria-operations-for-logs/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 集中式日志管理 VMware Aria …

蓝牙mesh数据包格式解析

蓝牙mesh数据包的结构如下图: 总长31个字节。 Length (1Byte):数据长度 Type (1Byte):广播类型 IVI (1bit):用来认证加密Network PDU的IV index的最低位 NID (7bits):网络ID,network ID。从网络密钥(Ne…

学习了两个多月就进了我们公司,顺利过了试用期,我心塞了...

转行起因 公司前段时间来了个大专机械专业毕业的,挺好奇他在如今这个环境下怎么进来的而且非本科非科班,后面我请他喝了一次酒,我才了解到他的故事,写出来与大家分享,希望对各位有点启迪。 他以前在一个大厂做售后工…

新来的00后真卷,我想离职了···

都说00后躺平了,但是有一说一,该卷的还是卷。 这不,前段时间我们公司来了个00后,工作没两年,跳槽到我们公司起薪20K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。…

sentinel基本原理以及核心类介绍

Sentinel 核心类解析 架构图 ProcessorSlotChain Sentinel 的核心骨架,如上图结构,将不同的 Slot 按照顺序串在一起(责任链模式),从而将不同的功能(限流、降级、系统保护)组合在一起。slot ch…

2023.05.11-利用GPT4free免费使用ChatGPT4

1. 简介 现在OpenAI,虽然出了ChatGPT4,但是只给plus会员用,对于国内的用户来说,不仅需要魔法,还需要有一张外网的信用卡来开通会员,使用起来重重不便,有一种想要花钱买服务,都找不到…

tf卡文件隐藏怎样恢复,原来有这三种方法,你了解多少呢?

TF卡是一种便携式存储设备,非常方便用于存储数据。但是,有时TF卡中的数据会被不小心隐藏了,也许是误操作,也许是病毒攻击等原因。所以,下面将讲述如何找回TF卡中被隐藏的数据。 【一】关于TF卡概述 TF卡(…