Python 绘图边缘留白问题解决方案 / plt.savefig / plt.subplots_adjust 函数简析

news2024/11/19 19:45:01

文章目录

  • Part.I Introduction
  • Part.II 解决方案
    • Chap.I plt.savefig
    • Chap.II plt.subplots_adjust
    • Chap.III plt.margins
  • Part.III 探索历程
    • Chap.I 默认保存方式
    • Chap.II 使用 bbox_inches 参数控制
    • Chap.III 自定义留白
  • Reference

Part.I Introduction

Python 绘图默认保存,图片边缘空白很多,看起来很难看,本文将探索如何解决 Python 绘图边缘留白问题。

在这里插入图片描述

Part.II 解决方案

下面直接上结论

import matplotlib.pyplot as plt

方法一

plt.savefig(path, bbox_inches='tight', pad_inches=0.05, dpi=200) 

通过 pad_inches 可以控制留白部分的大小


方法二

plt.subplots_adjust(top=0.93, bottom=0.1, right=0.98, left=0.07, hspace=0, wspace=0)
plt.margins(0.1, 0.1)
plt.savefig(path, dpi=200)

可通过调整 plt.subplots_adjust 函数中的参数值 top/ bottom/ right/ left 等来控制周围留白的多少。


下面将对函数 plt.savefig()plt.subplots_adjust()plt.margins() 中的参数进行简要的介绍。

Chap.I plt.savefig

函数原型如下

savefig(fname, *, dpi='figure', format=None, metadata=None,
        bbox_inches=None, pad_inches=0.1,
        facecolor='auto', edgecolor='auto',
        backend=None, **kwargs
       )

其中:

  • fname:图片的保存路径(含文件名)
  • dpi:图片分辨率,一般设为 300 就很清晰了
  • format:图片保存格式,如png/ pdf/ svg ...
  • metadata:要存储在图像元数据中的键/值对。支持的键和默认值取决于图像格式和后端(比较高深,一般用不到)。
  • bbox_inches:可取 strBbox。其中 Bbox 是以英寸为单位的边界框,仅保存图形的给定部分。如果设为 tight,那么则以『紧凑』模式保存图形。
  • pad_inches:浮点数,当 bbox_inches='tight' 时,图形周围的空白,默认0.1,建议0.05~0.2.
  • facecolor:前景色,绘图区域以外的部分颜色设置
  • edgecolor:xx颜色,(不知道)

Chap.II plt.subplots_adjust

函数原型如下

subplots_adjust(left = None, bottom = None, right = None, top = None, wspace = None, hspace = None)

其中

  • left :左边缘的位置
  • bottom:下边缘的位置
  • right:右边缘的位置
  • top:上边缘的位置
  • wspace:子图间的横向距离,一幅图不考虑
  • hspace:子图间的竖向距离,一幅图不考虑

在这里插入图片描述

Chap.III plt.margins

函数原型如下:

margins(x = None, y = None, tight = True

图像到黑框的距离,取值为[0,1]
在这里插入图片描述

Part.III 探索历程

测试所用的绘图代码如下:

import matplotlib.pyplot as plt

def test():
    years = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
    turnovers = [0.5, 9.36, 52, 191, 350, 571, 912, 1027, 1682, 2135, 2684]
    fig, ax = plt.subplots(1, 1, figsize=(11, 6), dpi=100, facecolor='w')
    plt.scatter(years, turnovers, c='red', s=100, label='legend')
    plt.xticks(range(2008, 2020, 3))
    plt.yticks(range(0, 3200, 800))
    plt.xlabel("Year", fontdict={'size': 16})
    plt.ylabel("number", fontdict={'size': 16})
    plt.title("Title", fontdict={'size': 20})
    plt.legend(loc='best')
    path=r'A:\OHanlon\Desktop\temp\a.png'

Chap.I 默认保存方式

在上面函数最后一行后面追加

plt.savefig(path, dpi=200)

为了能看出来图片边缘留白部分,用了一个黑框将其框起来了,如下图所示。可以看出默认情况下图片边缘留白部分很大。

在这里插入图片描述

Chap.II 使用 bbox_inches 参数控制

在上面函数最后一行后面追加

plt.savefig(path, bbox_inches='tight', pad_inches=0, dpi=200) 

在这种情况下最右边的框线都看不出来了,留白太小了(后来发现是因为 pad_inches=0 的设置)。

在这里插入图片描述

Chap.III 自定义留白

在上面函数最后一行后面追加

plt.subplots_adjust(top=0.93, bottom=0.1, right=0.98, left=0.07, hspace=0, wspace=0)
plt.margins(0.1, 0.1)
plt.savefig(path, dpi=200)

通过调整 plt.subplots_adjust 函数中的参数值 top/ bottom/ right/ left 等来控制周围留白的多少,十分方便。

在这里插入图片描述

Reference

  • 【python】解决maplotlib边缘留白太多
  • matplotlib 官网

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

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

相关文章

【DeepL】菜鸟教程:如何申请DeepL免费API并使用Python的DeepL

前言 在这篇技术博文中,我们将介绍如何利用DeepL的强大功能,通过其免费API在Python项目中实现高质量的文本翻译。我们将从基础开始,解释DeepL是什么,它的用途,如何申请免费API,以及如何在Python中使用DeepL库。 什么是DeepL? DeepL是一个基于人工智能的翻译服务,它以…

开通Jetbrains个人账号,赠送这些付费插件

开通Jetbrains个人账号,或者Jetbrains现成账号的, 可赠送以下付费插件 现成账号:https://web.52shizhan.cn/activity/xqt8ly 个人账号:https://web.52shizhan.cn/legal 账号支持全家桶系列:AppCode,CLion,DataGrip,GoLand,Intell…

3.9设计模式——Strategy 策略模式(行为型)

意图 定义一系列的算法,把它们一个个封装起来,并且使他们可以相互替换此模式使得算法可以独立于使用它们的客户而变化 结构 Strategy(策略)定义所有支持的算法的公共入口。Context使用这个接口来调用某ConcreteStrategy定义的方…

C++编译器的程序转化

编译器在某些情况下会对程序进行转化,有些是编译器需要的,有些是出于性能考虑的,转化可能会产生出乎意料的结果 文章目录 明确的初始化操作参数的初始化返回值的初始化在使用者层面做优化在编译器层面做优化NRV 优化NRV优化的弊端 参考资料 明…

【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD) 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 My …

算法入门<二>:分治算法之汉诺塔问题及递归造成的栈溢出

1、分治算法 分治(divide and conquer),全称分而治之,是一种非常重要且常见的算法策略。分治通常基于递归实现,包括“分”和“治”两个步骤。 分(划分阶段):递归地将原问题分解为两…

【C语言】指针篇-精通库中的快速排序算法:巧妙掌握技巧(4/5)

🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C笔记专栏: C笔记 🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、回调函数二、快速排序(Qsort)2.1 Qsort参数部分介绍2.2 不…

数据仓库和数据仓库分层

一、数据仓库概念 数据仓库(Data Warehouse),可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业&#…

计算机网络4——网络层4内部路由选择协议

文章目录 一、有关路由选择协议的几个基本概念1、理想的路由算法2、分层次的路由选择协议 二、内部网关协议 RIP1、协议 RIP 的工作原理2、特点3、距离向量算法4、坏消息传播慢 三、内部网关协议 OSPF1、基本特点2、OSPF 的五种分组类型 本节将讨论几种常用的路由选择协议&…

uniapp 自定义 App启动图

由于uniapp默认的启动界面太过普通 所以需要自定义个启动图 普通的图片不可以过不了苹果的审核 所以使用storyboard启动图 生成 storyboard 的网站:初雪云-提供一站式App上传发布解决方案

从零入门区块链和比特币(第一期)

欢迎来到我的区块链与比特币入门指南!如果你对区块链和比特币感兴趣,但不知道从何开始,那么你来对地方了。本博客将为你提供一个简明扼要的介绍,帮助你了解这个领域的基础知识,并引导你进一步探索这个激动人心的领域。…

使用RTSP将笔记本摄像头的视频流推到开发板

一、在Windows端安装ffmpeg 1. 下载ffmpeg:下载ffmpeg 解压ffmpeg-master-latest-win64-gpl.zip bin 目录下是 dll 动态库 , 以及 可执行文件 ;将 3 33 个可执行文件拷贝到 " C:\Windows " 目录下 ,将所有的 " .dll " 动态库拷贝到 " C:\Windows\Sy…

java集合框架中的Map和Set的使用方式

目录 一、Map的使用方法说明 put(): GetOrDefault(): containsKey()与containsVal(): keySet()与m.values(): 二、Set的使用方法说明 add(): iterator()---->迭代器 一、M…

19 做好微服务间依赖的治理和分布式事务

在前两讲里,分别从微服务的对外接口、消息消费以及微服务自身的相关编码规范上阐述了“防备上游、做好自己”这两个准则如何落地。 在本讲里,将会讲解为什么要“怀疑下游”,以及有哪些手段可以落地此条准则。此外,还会介绍在进行…

每日OJ题_DFS爆搜深搜回溯剪枝②_力扣526. 优美的排列

目录 力扣526. 优美的排列 解析代码 力扣526. 优美的排列 526. 优美的排列 难度 中等 假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm(下标从 1 开始),只要满足下述条件 之一 ,该数组就是一个 优美的排列 &#…

Content type ‘application/json;charset=UTF-8‘ not supported异常的解决过程

1.首先说明开发场景 *就是对该json格式数据传输到后台 后台实体类 import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import org.sp…

Linux搭建靶场

提前准备: 文章中所使用到的Linux系统:Ubantu20.4sqlilabs靶场下载地址:GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based. 一. 安装phpstudy phpstudy安装命令:wget -O install.sh h…

《MySQL对库的基本操作》

文章目录 一、查看数据库列表查看数据库中的所有表想知道当前处于哪个数据库里 二、创建一个数据库三、删除一个数据库知道两个集1.字符集2.校验集修改数据库的字符集和编码集 不同的校验码对数据库的影响四、数据库的备份与恢复注意事项:备份数据库中的表 总结 一、…

Lan仿朋友圈系统源码,用于表白墙等微商相册,商品图册等

这是一套基于PHP开发的Lan仿朋友圈系统开源,适用于表白墙、微商相册、商品图册等场景。 下 载 地 址 : runruncode.com/php/19750.html 主要功能包括: - 支持前端用户注册和消息提示。 - 用户注册时可设置必须验证邮箱账号,以…

【C++】学习笔记——类和对象_5

文章目录 二、类和对象14. 日期类的实现15. const成员16. 取地址重载17. 再谈构造函数初始化列表 18. explicit关键字19. static成员 未完待续 二、类和对象 14. 日期类的实现 上一篇我们已经大致将日期类的重要功能都给实现了,这节将会对日期类进行完善&#xff…