У меня есть графики, которые я аннотирую, используя изображения:
def add_image(axe, filename, position, zoom):
img = plt.imread(filename)
off_img = matplotlib.offsetbox.OffsetImage(img, zoom = zoom, resample = False)
art = matplotlib.offsetbox.AnnotationBbox(off_img, position, xybox = (0, 0),
xycoords = axe.transAxes, boxcoords = "offset points", frameon = False)
axe.add_artist(art)
Затем я сохраняю рисунок в некоторый файл PDF, скажем fig.pdf
. Я ожидаю, что точное исходное изображение будет встроено в полученный PDF без повторной выборки. Тем не менее, изображение пересэмплируется в соответствии с параметром dpi
savefig()
.
Как заставить matplotlib НЕ повторно сэмплировать изображение (нет смысла делать что для векторного вывода в любом случае)?
Для более подробной информации, вот простой пример, используя это изображение как image.png
:
import numpy as np
import matplotlib
matplotlib.use("agg")
import matplotlib.pyplot as plt
def add_image(axe, filename, position, zoom):
img = plt.imread(filename)
off_img = matplotlib.offsetbox.OffsetImage(img, zoom = zoom, resample = False)
art = matplotlib.offsetbox.AnnotationBbox(off_img, position, xybox = (0, 0),
xycoords = axe.transAxes, boxcoords = "offset points", frameon = False)
axe.add_artist(art)
# ==========
fig = plt.figure()
axe = plt.axes()
fig.set_size_inches(3, 1.5)
axe.plot(np.arange(10), np.arange(10))
add_image(axe, "image.png", position = (0.2, 0.7), zoom = 0.07)
fig.savefig("temp.pdf", bbox_inches = "tight", pad_inches = 0)
Ожидаемый результат:
Фактический результат:
РЕДАКТИРОВАТЬ: Существует ошибка / особенность вопроса для этого вопроса