Автоматическое создание сетки изображений

Автоматическое создание сетки изображений

У меня есть несколько изображений pdf, которые я сгенерировал с помощью matplotlib. Я хочу иметь возможность расположить их в произвольной сетке. Для этой цели я написал скрипт python, который в свою очередь пишет и запускает latex.

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument('--images', nargs='+', help='List of images to be processed')
    parser.add_argument('--output', help='Output file name', default='output_grid.pdf')
    parser.add_argument('--grid', nargs=2, type=int, help='Grid dimensions (rows, columns)')
    args = parser.parse_args()
    return args

def main():
    args = parse_args()
    assert len(args.images) == args.grid[0]*args.grid[1], "Number of images does not match grid dimensions"
    tex_outfile = "_{}_.tex".format(random.randint(0,100000))
    with open(tex_outfile, 'w') as f:
        f.write("\\documentclass[varwidth]{standalone}\n")
        f.write("\\usepackage[pdftex]{graphicx, color}\n")
        f.write("\\begin{document}\n")
        f.write("\\begin{{tabular}}{{{}}}\n".format(" c "*args.grid[1]))
        for k,v in enumerate(args.images):
            f.write("\\includegraphics[width={:.9f}\\linewidth,keepaspectratio]{{{}}}".format(1.0/(args.grid[1] + 1), v))
            if (k+1) % args.grid[1] != 0:
                f.write(" & ")
            else: 
                f.write(" \\\\\n")
        f.write("\\end{tabular}\n")
        f.write("\\end{document}\n")
    os.system("pdflatex {}".format(tex_outfile))
    os.system("mv {}.pdf {}".format(tex_outfile[:-4], args.output))
    os.system("rm {}*".format(tex_outfile[:-4]))

Приведенный выше код Python генерирует Latex, который затем запускается pdflatexв строке кода Python.os.system("pdflatex {}".format(tex_outfile))

\documentclass[varwidth]{standalone}
\usepackage[pdftex]{graphicx, color}
\begin{document}
\begin{tabular}{ c  c }
\includegraphics[width=0.333333333\linewidth,keepaspectratio]{image1.pdf} & \includegraphics[width=0.333333333\linewidth,keepaspectratio]{image2.pdf} \\
\includegraphics[width=0.333333333\linewidth,keepaspectratio]{image3.pdf} & \includegraphics[width=0.333333333\linewidth,keepaspectratio]{image4.pdf} \\
\end{tabular}
\end{document}

Проблема в том, что изображения не идеально выровнены, посмотрите на это изображение (конвертированное в png для stackexchange):

введите описание изображения здесь

Я думаю, что проблема выравнивания связана с разной длиной y-тиков. Есть ли способ исправить это в предоставленном мной коде? Или альтернативный метод, который может быть лучше (использование subplotsне сработает, так как отдельные изображения уже предоставлены в виде pdf-файлов).

решение1

выровняйте их по правому краю, а не по центру, чтобы длина левой метки не влияла на ситуацию, и используйте масштаб, а не ширину, чтобы изображения масштабировались на одинаковую величину, и графики будут иметь одинаковый размер, если они изначально были одинакового размера.

Связанный контент