找回密码
 会员注册
查看: 27|回复: 0

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

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-9 17:30:56 | 显示全部楼层 |阅读模式
文章目录Part.IIntroductionPart.II解决方案Chap.Iplt.savefigChap.IIplt.subplots_adjustChap.IIIplt.marginsPart.III探索历程Chap.I默认保存方式Chap.II使用bbox_inches参数控制Chap.III自定义留白ReferencePart.IIntroductionPython绘图默认保存,图片边缘空白很多,看起来很难看,本文将探索如何解决Python绘图边缘留白问题。Part.II解决方案下面直接上结论importmatplotlib.pyplotasplt1'运行运行方法一plt.savefig(path,bbox_inches='tight',pad_inches=0.05,dpi=200)1通过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)123可通过调整plt.subplots_adjust函数中的参数值top/bottom/right/left等来控制周围留白的多少。下面将对函数plt.savefig()、plt.subplots_adjust()和plt.margins()中的参数进行简要的介绍。Chap.Iplt.savefig函数原型如下savefig(fname,*,dpi='figure',format=None,metadata=None,bbox_inches=None,pad_inches=0.1,facecolor='auto',edgecolor='auto',backend=None,**kwargs)12345其中:fname:图片的保存路径(含文件名)dpi:图片分辨率,一般设为300就很清晰了format:图片保存格式,如png/pdf/svg...metadata:要存储在图像元数据中的键/值对。支持的键和默认值取决于图像格式和后端(比较高深,一般用不到)。bbox_inches:可取str或Bbox。其中Bbox是以英寸为单位的边界框,仅保存图形的给定部分。如果设为tight,那么则以『紧凑』模式保存图形。pad_inches:浮点数,当bbox_inches='tight'时,图形周围的空白,默认0.1,建议0.05~0.2.facecolor:前景色,绘图区域以外的部分颜色设置edgecolor:xx颜色,(不知道)Chap.IIplt.subplots_adjust函数原型如下subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=None,hspace=None)1其中left:左边缘的位置bottom:下边缘的位置right:右边缘的位置top:上边缘的位置wspace:子图间的横向距离,一幅图不考虑hspace:子图间的竖向距离,一幅图不考虑Chap.IIIplt.margins函数原型如下:margins(x=None,y=None,tight=True)1图像到黑框的距离,取值为[0,1]Part.III探索历程测试所用的绘图代码如下:importmatplotlib.pyplotaspltdeftest():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'1234567891011121314'运行运行Chap.I默认保存方式在上面函数最后一行后面追加plt.savefig(path,dpi=200)1为了能看出来图片边缘留白部分,用了一个黑框将其框起来了,如下图所示。可以看出默认情况下图片边缘留白部分很大。Chap.II使用bbox_inches参数控制在上面函数最后一行后面追加plt.savefig(path,bbox_inches='tight',pad_inches=0,dpi=200)1在这种情况下最右边的框线都看不出来了,留白太小了(后来发现是因为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)123通过调整plt.subplots_adjust函数中的参数值top/bottom/right/left等来控制周围留白的多少,十分方便。Reference【python】解决maplotlib边缘留白太多matplotlib官网
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-9 20:24 , Processed in 0.417107 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表