Я новичок в Python и Matplotlib, я хотел бы просто применить цветовую карту к изображению и написать результирующее изображение, без использования осей, меток, заголовков или чего-то, что обычно автоматически добавляется matplotlib. Вот что я сделал:
def make_image(inputname,outputname):
data = mpimg.imread(inputname)[:,:,0]
fig = plt.imshow(data)
fig.set_cmap('hot')
fig.axes.get_xaxis().set_visible(False)
fig.axes.get_yaxis().set_visible(False)
plt.savefig(outputname)
Он успешно удаляет ось фигуры, но сохраненная фигура представляет собой белые отступы и рамку вокруг фактического изображения. Как я могу удалить их (по крайней мере, белый отступ)? Спасибо
python
matplotlib
sunmat
источник
источник
imshow
. Если у вас есть график рассеяния, вам может помочь следующий ответ: stackoverflow.com/a/40727744/4124317Ответы:
Я думаю, что команда
axis('off')
решает одну из проблем более кратко, чем изменение каждой оси и границы в отдельности. Это все еще оставляет белое пространство вокруг границы как бы то ни было. Добавлениеbbox_inches='tight'
кsavefig
команде почти приведет вас туда, вы можете увидеть в примере ниже, что оставшееся пустое пространство намного меньше, но все еще присутствует.Обратите внимание, что более новые версии matplotlib могут требовать
bbox_inches=0
вместо строки'tight'
(через @episodeyang и @kadrach)источник
fig = plt.figure()
,ax = plt.axes([0,0,1,1])
, тоplt.imshow(data,interpolation="nearest"
. Надеемсяplt.axis("off")
, что в сочетании с этим он должен избавиться от всего, кроме самого изображения!bbox_inches=0
сделали свое дело.Я узнал этот трюк от matehat, здесь :
доходность
источник
plt.Axes(fig, [0,0,1,1])
. Это говорит matplotlib создать набор осей с левым нижним углом в точке, расположенной в (0%, 0%), с шириной и высотой (100%, 100%).Возможное простейшее решение:
Я просто объединил метод, описанный в вопросе, и метод из ответа Hooked.
После этого кода нет пробелов и фрейма.
источник
fig.axes.get_xaxis().set_visible(False)
решает проблему. Спасибоfig.axes[0]
и вообще все или выбранные оси.Никто
imsave
еще не упомянул , что делает это однострочным:Он напрямую сохраняет изображение как есть, то есть не добавляет никаких осей или границ / отступов.
источник
Вы также можете указать степень рисунка для
bbox_inches
аргумента. Это избавило бы от белой набивки вокруг фигуры.источник
Это должно удалить все отступы и границы:
источник
ax
) сextent = plt.gca().get_window_extent().transformed(fig.dpi_scale_trans.inverted())
.Я обнаружил, что это все задокументировано ...
https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.axes.Axes.axis.html#matplotlib.axes.Axes.axis
Мой код "bcK" - изображение 512x512
источник
Ответ с лишним голосом больше не работает. Чтобы заставить его работать, вам нужно вручную добавить ось, установленную в [0, 0, 1, 1], или удалить патч под рисунком.
Кроме того, вы можете просто удалить патч. Вам не нужно добавлять подзаговор, чтобы удалить отступы. Это упрощено из ответа Влады ниже
Это проверено с версией
3.0.3
на 2019/06/19. Изображение см. Ниже:Гораздо проще сделать это
pyplot.imsave
. Подробнее см. Ответ Луатора нижеисточник
Мне понравился ответ Ubuntu , но он не показывал явно, как установить размер для неквадратных изображений из коробки, поэтому я изменил его для легкой копирования-вставки:
Сохранять изображения без рамки легко, независимо от того, какое значение dpi вы выберете, если сохранить pixel_size / dpi = size.
Однако показ жуткий. Если вы выберете маленькое dpi, размер вашего изображения может быть больше, чем у экрана, и вы получите границы во время отображения. Тем не менее, это не влияет на экономию.
Таким образом, для
Дисплей становится граничным (но сохранение работает):
источник
Во-первых, для определенных форматов изображений (например, TIFF ) вы можете сохранить цветовую карту в заголовке, и большинство зрителей покажет ваши данные с помощью цветной карты.
Для сохранения реального
matplotlib
изображения, которое может быть полезно для добавления аннотаций или других данных к изображениям, я использовал следующее решение:источник
Спасибо за потрясающие ответы от всех ... У меня была точно такая же проблема с желанием нарисовать только изображение без лишних отступов / пробелов и т. Д., Поэтому был очень рад найти здесь идеи каждого.
Помимо изображения без отступов, я также хотел иметь возможность легко добавлять аннотации и т. Д., Помимо простого графического изображения.
Так что я закончил тем, что соединил ответ Дэвида с csnemes, чтобы сделать простую обертку во время создания фигуры. Когда вы используете это, вам не нужны никакие изменения позже с imsave () или чем-то еще:
источник