将多个图像保存为 PDF,无需链接 Subplot 的格式

6 python matplotlib python-3.x

我有一个df这样的,如下所示。我正在做的是,我试图循环遍历带有df路径的列,并将图像打印为子图,其中图像路径为一列axis0,其他列路径并行,axis1如下所示。

      identity       VGG-Face_cosine    img                 comment
0   ./clip_v4/3.png   1.110223e-16  .\clip_v3\0.png        .\clip_v3\0.png is matched with ./clip_v4/3.png
0   ./clip_v4/2.png   2.220446e-16  .\clip_v3\1.png        .\clip_v3\1.png is matched with ./clip_v4/2.png
1   ./clip_v4/4.png   2.220446e-16  .\clip_v3\1.png        .\clip_v3\1.png is matched with ./clip_v4/4.png
2   ./clip_v4/5.png   2.220446e-16  .\clip_v3\1.png        .\clip_v3\1.png is matched with ./clip_v4/5.png
0   ./clip_v4/2.png   2.220446e-16  .\clip_v3\2.png        .\clip_v3\2.png is matched with 
Run Code Online (Sandbox Code Playgroud)

我循环遍历这两列identityimg两列并绘制如下

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from matplotlib import rcParams


df = df.iloc[1:]
#merged_img = []


for index, row in df.iterrows():

    # figure size in inches optional
    rcParams['figure.figsize'] = 11 ,8

    # read images
    
    img_A = mpimg.imread(row['identity'])
    img_B = mpimg.imread(row['img'])

    # display images
    fig, ax = plt.subplots(1,2)
 
    
    ax[0].imshow(img_A)
    ax[1].imshow(img_B)
    
    
Run Code Online (Sandbox Code Playgroud)

我得到的示例输出。

###控制台输出

控制台输出示例

到现在为止还好。我的下一个想法是保存这些图像,因为它们带有子图块PDF。我不想改变它打印的结构。就像我也只想在 PDF 中并排放置 2 个图像一样。我已经尝试过许多可用的解决方案。但是,我无法将我的代码部分与documentation. 有什么办法可以实现我的目标吗?任何参考都会有帮助!提前致谢。

Vit*_*are 4

使用PdfPagesfrommatplotlib.backends.backend_pdf将数字一张一张地保存在同一 pdf 文件的不同页面上:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from matplotlib import rcParams
from matplotlib.backends.backend_pdf import PdfPages

df = df.iloc[1:]
rcParams['figure.figsize'] = 11 ,8
pdf_file_name = 'my_images.pdf' 

with PdfPages(pdf_file_name) as pdf:

    for index, row in df.iterrows():
        img_A = mpimg.imread(row['identity'])
        img_B = mpimg.imread(row['img'])
        fig, ax = plt.subplots(1,2)
        ax[0].imshow(img_A)
        ax[1].imshow(img_B)

        # save the current figure at a new page in pdf_file_name
        pdf.savefig()   
Run Code Online (Sandbox Code Playgroud)

另请参阅https://matplotlib.org/stable/api/backend_pdf_api.html