
Ich habe mehrere PDF-Bilder, die ich mit erstellt habe matplotlib
. Ich möchte sie in einem beliebigen Raster anordnen können. Zu diesem Zweck habe ich ein Python-Skript geschrieben, das wiederum Latex schreibt und ausführt.
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]))
Der obige Python-Code generiert das folgende Latex, das dann pdflatex
in der Python-Codezeile ausgeführt wirdos.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}
Mein Problem besteht darin, dass die Bilder nicht perfekt ausgerichtet sind, siehe dieses Bild (für Stackexchange in PNG konvertiert):
Ich denke, das Ausrichtungsproblem liegt an unterschiedlich langen Y-Ticks. Gibt es eine Möglichkeit, dies in dem von mir bereitgestellten Code zu beheben? Oder eine Alternative, die möglicherweise eine bessere Methode ist (die Verwendung subplots
funktioniert nicht, da die einzelnen Bilder bereits als PDFs bereitgestellt werden).
Antwort1
Richten Sie sie rechtsbündig aus, nicht zentriert, damit die Länge der linken Beschriftung keinen Einfluss hat, und verwenden Sie den Maßstab, nicht die Breite, damit die Bilder um den gleichen Betrag skaliert werden und die Diagramme dieselbe Größe haben, wenn sie ursprünglich dieselbe Größe hatten.