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

server/2024/9/23 4:43:46/

文章目录

  • 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 解决方案

下面直接上结论

python">import matplotlib.pyplot as plt

方法一

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

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


方法二

python">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

函数原型如下

python">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

函数原型如下

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

其中

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

在这里插入图片描述

Chap.III plt.margins

函数原型如下:

python">margins(x = None, y = None, tight = True

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

Part.III 探索历程

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

python">import matplotlib.pyplot as pltdef 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 默认保存方式

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

python">plt.savefig(path, dpi=200)

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

在这里插入图片描述

Chap.II 使用 bbox_inches 参数控制

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

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

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

在这里插入图片描述

Chap.III 自定义留白

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

python">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.ppmy.cn/server/27742.html

相关文章

GZIP文件格式解析和Inflate静态Huffman解压缩

GZIP是封装了Deflate压缩的格式文件;Deflate使用了无压缩、HuffmanLZ77进行压缩;解压是Inflate,Huffman包括静态Huffman压缩和动态Huffman压缩两种模式。 Java语言实现了GZIP格式解析、Inflate的静态Huffman解压缩、CRC32校验 算法。 gzip文…

镜像部署和服务器步署的介绍和不同点

镜像部署通常指的是使用Docker容器进行部署,而服务器部署则是指直接在服务器的操作系统上安装依赖并运行项目。下面是两种部署方式的介绍和它们的主要不同点: 镜像部署(Docker): 环境隔离:Docker通过容器…

开源农场管理软件

软件介绍 Tania是一款基于Go、Vue.JS和SQLite的开源农场日记软件。该项目始于2016年11月,由于无法找到适合自己需求的软件,开发团队决定自己搭建一套适合家庭后院花园的管理系统,并可以随时随地进行管理。 项目功能描述 Tania是一款免费且开源…

ArkTS开发原生鸿蒙HarmonyOS短视频应用

HarmonyOS实战课程“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”已经于今日上线至慕课网(https://coding.imooc.com/class/843.html),有致力于鸿蒙生态开发的同学们可以关注一下。 课程简介 本课程以原生鸿蒙Ha…

描述Vue实例的生命周期钩子函数

Vue实例的生命周期是指Vue实例从创建到销毁的过程,这个过程包括开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程。Vue.js提供了很多钩子函数,让我们可以在Vue实例的不同状态下添加自定义代码。这些钩子函数主要被分为四个…

讯饶科技 X2Modbus 敏感信息泄露

讯饶科技 X2Modbus 敏感信息泄露 文章目录 讯饶科技 X2Modbus 敏感信息泄露漏洞描述影响版本实现原理漏洞复现修复建议 漏洞描述 X2Modbus是一款功能很强大的协议转换网关, 这里的X代表各家不同 的通信协议,2是To的谐音表示转换,Modbus就是最…

延时任务通知服务的设计及实现(二)-- redisson的延迟队列RDelayedQueue

一、接着上文 RDelayedQueue作为redisson封装的一个分布式延迟队列,直接拿来使用还是比较简单的。 本文主要包括以下几部分: 保存至延迟队列(生产者)读取延迟队列(消费者)从延迟队列移除任务 二、rediss…

构建本地大语言模型知识库问答系统

MaxKB 2024 年 4 月 12 日,1Panel 开源项目组正式对外介绍了其官方出品的开源子项目 ——MaxKB(github.com/1Panel-dev/MaxKB)。MaxKB 是一款基于 LLM(Large Language Model)大语言模型的知识库问答系统。MaxKB 的产品…