Python脚本:matplotlib 子图排版和输出矢量图

如果是论文插图,不建议使用matplotlib 的生成图,建议用专业软件或Visio严格控制图片尺寸和字体字号


需求:

  • 多子图排列
  • 关闭子图坐标轴显示
  • 子图间距适中(紧凑)
  • 图像边缘适中(改变布局和大小)
  • 矢量图保存(dpi设置)

默认布局:

import matplotlib.pyplot as plt

imgs= get_gray_imgs()

fig, axes = plt.subplots(2, 5)
axes = axes.flatten()
for i in range(10):
	axes[i].imshow(imgs[i], cmap="gray")
	axes[i].set_title("img" + str(i))
	axes[i].set_axis_off()
fig.show()
fig.savefig('imgs.png', dpi=600, format='png')

在这里插入图片描述

代码说明:

  • 使用matplotlib时,应当返回具体的画布对象fig和坐标轴对象ax,特别简单的绘图显示时才建议直接操作plt
  • fig, axes = plt.subplots(2, 5)的具体用法一定要查看官方文档,根据需求,去寻找对应的设置方法:参见 fig画布对象axes轴对象
  • 用轴对象ax设置标题和坐标轴的方法不同于plt类,还是要看官方文档,而不是在网上找博客
  • 文本尺寸会自动选择合适的
  • 矢量图保存fig.savefig不存在网上所说的玄学,只要操作画布实例fig,就不会出现保存图片是空白的问题,和代码执行顺序无关。

紧凑布局:
上述代码完成了所需功能,但布局需要调整,仅仅使用fig.set_tight_layout(True)或者fig.subplots_adjust是不够的,还应该调整画布的大小。但是画布大小调整函数fig.set_size_inches(34, 9)的输入参数是 英寸,因此需要手动计算。

不建议模糊设置画布参数,因为很难设置合适文字尺寸,会造成文字图片的比例失调,如下图:
在这里插入图片描述
这就需要在默认布局的基础上,获得子图的宽高尺寸(单位:英寸)和文字磅值

  1. 画图工具 编辑的默认布局图
  2. 选择 文件 -> 属性,单位改为英寸
    在这里插入图片描述
  3. 框处某个子图的大小,算出所需紧凑布局的画布大小。
    如 示例子图 5.88×4.14,总共 2×5 个子图,那么紧凑布局的画布宽高可以设置为 30×8
    在这里插入图片描述
  4. 插入文本,对比当前文字的磅值,如52

完整代码:

import matplotlib.pyplot as plt

imgs= get_gray_imgs()

fig, axes = plt.subplots(2, 5)
fig.set_size_inches(30, 7)
# fig.subplots_adjust(left=0.04, top= 0.96, right = 0.96, bottom = 0.04, wspace = 0.01, hspace = 0.01)   
fig.set_tight_layout(True)  # subplots_adjust 约束太多,不容易计算,效果不好
axes = axes.flatten()
for i in range(10):
    axes[i].imshow(imgs[i], cmap="gray")
    axes[i].set_title("img " + str(i), fontsize=52)
    axes[i].set_axis_off()
fig.show()
fig.savefig('imgs.png', dpi=600, format='png')

最终效果:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值