Ich habe 12 Figuren im SVG-Format und möchte sie in 3 Spalten und 4 Reihen in Form von 12 Panels arrangieren, die in eine gedruckte A4-Version zur Veröffentlichung passen würden. Was gewünscht wird, ist, den Flächenbedeckungsanteil so zu maximieren, dass der leere Raum minimiert wird, um alle Merkmale in den 12 Bildern zu sehen.Gibt es im Modul svgutils.compose() einen Fehler bezüglich der Anordnung der Figuren mit der Methode tile()?
Ich bin mir bewusst, dass ich Subplots unter einer großen Zahl in Matplotlib verwenden kann. In meinem Fall wird jedoch jede dieser Figuren unabhängig von einer anderen Funktion derselben Simulation erzeugt. Ich kann nicht immer eine große Simulation in jeden Anruf einbetten, da ich für verschiedene Zwecke auf einige Figuren an verschiedenen Orten zugreifen muss. Mit anderen Worten, je weniger ich die ursprüngliche Simulation manipuliere, desto weniger Kopfschmerzen muss ich haben, um verschiedene Plots daraus zu extrahieren. Ich möchte alle Änderungen in der ursprünglichen Simulation minimieren und stattdessen meinen zusätzlichen Code meinem einzigen Zweck hinzufügen, einige der Plots an derselben Stelle zu sammeln. Hier
sind, was ich mit meinem Python-Code kommen, um dies zu erreichen:
import matplotlib.pyplot as plt
import svgutils.transform as sg
from svgutils.compose import *
import os
plt.figure(1, tight_layout=True)
...
plt.savefig('/some_path/first_xy.svg')
plt.figure(2, tight_layout=True)
...
plt.savefig('/some_path/first_xz.svg')
plt.figure(3, tight_layout=True)
...
plt.savefig('/some_path/first_yz.svg')
plt.figure(4, tight_layout=True)
...
plt.savefig('/some_path/second_xy.svg')
plt.figure(5, tight_layout=True)
...
plt.savefig('/some_path/second_xz.svg')
plt.figure(6, tight_layout=True)
...
plt.savefig('/some_path/second_yz.svg')
plt.figure(7, tight_layout=True)
...
plt.savefig('/some_path/third_xy.svg')
plt.figure(8, tight_layout=True)
...
plt.savefig('/some_path/third_xz.svg')
plt.figure(9, tight_layout=True)
...
plt.savefig('/some_path/third_yz.svg')
plt.figure(10, tight_layout=True)
...
plt.savefig('/some_path/fourth_xy.svg')
plt.figure(11, tight_layout=True)
...
plt.savefig('/some_path/fourth_xz.svg')
plt.figure(12, tight_layout=True)
...
plt.savefig('/some_path/fourth_yz.svg')
myfigure = Figure("21cm", "29.7cm",
SVG("/some_path/first_xy.svg"),
SVG("/some_path/first_xz.svg"),
SVG("/some_path/first_yz.svg"),
SVG("/some_path/second_xy.svg"),
SVG("/some_path/second_xz.svg"),
SVG("/some_path/second_yz.svg"),
SVG("/some_path/third_xy.svg"),
SVG("/some_path/third_xz.svg"),
SVG("/some_path/third_yz.svg"),
SVG("/some_path/fourth_xy.svg"),
SVG("/some_path/fourth_xz.svg"),
SVG("/some_path/fourth_yz.svg")
).tile(3, 4)
myfigure.save('/some_path/complete_figure.svg')
os.system('inkscape --export-png=/some_path/complete_figure.png /some_path/complete_figure.svg --export-background=white --export-area-drawing')
jedoch diesen Code ausgeführt werden erzeugt eine seltsame Fehlermeldung an die Funktion im Zusammenhang verwendet wird, tile()
, zu einer Gruppe 12 Figuren wie unten in eine Seite A4-:
Traceback (most recent call last): File "script.py", line 70, in ).tile(3, 4)
File "/usr/local/anaconda3/lib/python3.5/site-packages/svgutils/compose.py", line 287, in tile dx = (self.width/ncols).to('px').value TypeError: unsupported operand type(s) for /: 'Unit' and 'int'
ich meinen Code auf einem Remote-Desktop-Uhr läuft, aber ich den Inhalt compose.py
zugreifen können. Ich weiß jedoch nicht, ob es einen Fehler in dieser Routine gibt. Was ist das Problem?