Ich habe dies in meiner matplotlib-Quelle behoben, aber es ist keine schöne Lösung. Wenn Sie jedoch wie ich sehr genau wissen, wie das Diagramm aussieht, lohnt es sich.
Das Problem scheint in den Rendering-Backends zu liegen. Sie erhalten jeweils die richtigen Werte für Linienbreite, Schriftgröße usw., die jedoch beim Rendern als PDF oder PNG etwas größer sind als beim Rendern mit show ().
Ich habe der Quelle für die PNG-Generierung in der Datei matplotlib / backends / backend_agg.py einige Zeilen hinzugefügt. Sie können ähnliche Änderungen für jedes Backend vornehmen, das Sie verwenden, oder einen Weg finden, um eine cleverere Änderung an einem einzelnen Ort vorzunehmen;)
Zu meiner matplotlib / backends / backend_agg.py Datei hinzugefügt:
42
43 PATH_SCALAR = .8
44 FONT_SCALAR = .95
89 def draw_markers(self, *kl, **kw):
90
91 kl[0].set_linewidth(kl[0].get_linewidth()*PATH_SCALAR)
92 return self._renderer.draw_markers(*kl, **kw)
130 else:
131
132 gc.set_linewidth(gc.get_linewidth()*PATH_SCALAR)
133 self._renderer.draw_path(gc, path, transform, rgbFace)
241 font.clear()
242
243 size = prop.get_size_in_points()*FONT_SCALAR
244 font.set_size(size, self.dpi)
Das entspricht vorerst meinen Anforderungen, aber je nachdem, was Sie tun, möchten Sie möglicherweise ähnliche Änderungen in anderen Methoden implementieren. Oder finden Sie einen besseren Weg, um dasselbe ohne so viele Zeilenwechsel zu tun!
Aktualisieren: Nachdem ich ein Problem im matplotlib-Projekt bei Github veröffentlicht hatte, konnte ich die Ursache meines Problems ermitteln: Ich hatte die Einstellung figure.dpi in der matplotlibrc-Datei geändert. Wenn dieser Wert vom Standardwert abweicht, werden meine savefig () - Bilder anders ausgegeben, auch wenn ich die savefig dpi so festgelegt habe, dass sie mit der Abbildung dpi übereinstimmt. Anstatt die Quelle wie oben zu ändern, habe ich einfach die Einstellung figure.dpi als Standardeinstellung 80 beibehalten und konnte mit savefig () Bilder generieren, die wie Bilder aus show () aussahen.
Leon, hast du auch diese Einstellung geändert?