Я исправил это в моем источнике matplotlib, но это не очень хорошо. Однако, если вы, как и я, очень внимательно относитесь к тому, как выглядит график, оно того стоит.
Проблема, кажется, в бэкэндах рендеринга; каждый из них получает правильные значения ширины линии, размера шрифта и т. д., но это получается немного больше при рендеринге в формате PDF или PNG, чем при рендеринге с show ().
Я добавил несколько строк в источник для генерации PNG в файле matplotlib / backends / backend_agg.py. Вы можете внести аналогичные изменения для каждого используемого вами бэкэнда или найти способ сделать более умное изменение в одном месте;)
Добавлено в мой файл matplotlib / backends / backend_agg.py:
# The top of the file, added lines 42 - 44
42 # @warning: CHANGED FROM SOURCE to draw thinner lines
43 PATH_SCALAR = .8
44 FONT_SCALAR = .95
# In the draw_markers method, added lines 90 - 91
89 def draw_markers(self, *kl, **kw):
90 # @warning: CHANGED FROM SOURCE to draw thinner lines
91 kl[0].set_linewidth(kl[0].get_linewidth()*PATH_SCALAR)
92 return self._renderer.draw_markers(*kl, **kw)
# At the bottom of the draw_path method, added lines 131 - 132:
130 else:
131 # @warning: CHANGED FROM SOURCE to draw thinner lines
132 gc.set_linewidth(gc.get_linewidth()*PATH_SCALAR)
133 self._renderer.draw_path(gc, path, transform, rgbFace)
# At the bottom of the _get_agg_font method, added line 242 and the *FONT_SCALAR
241 font.clear()
242 # @warning: CHANGED FROM SOURCE to draw thinner lines
243 size = prop.get_size_in_points()*FONT_SCALAR
244 font.set_size(size, self.dpi)
Так что это соответствует моим потребностям на данный момент, но, в зависимости от того, что вы делаете, вы можете захотеть внести аналогичные изменения в другие методы. Или найдите лучший способ сделать то же самое без стольких изменений строки!
Обновление: После публикации проблемы в проекте matplotlib на Github я смог отследить источник своей проблемы: я изменил настройку figure.dpi в файле matplotlibrc. Если это значение отличается от значения по умолчанию, мои изображения savefig () получаются другими, даже если я установил df savefig равным значению dpi. Таким образом, вместо изменения источника, как указано выше, я просто сохранил значение figure.dpi по умолчанию 80 и смог генерировать изображения с помощью savefig (), которые выглядели как изображения из show ().
Леон, ты тоже менял эту настройку?