Мне нужно взять изображение и сохранить его после некоторого процесса. Фигура выглядит хорошо, когда я ее отображаю, но после сохранения фигуры у меня появилось свободное пространство вокруг сохраненного изображения. Я попробовал 'tight'
вариант для savefig
метода, тоже не работал. Код:
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
fig = plt.figure(1)
img = mpimg.imread(path)
plt.imshow(img)
ax=fig.add_subplot(1,1,1)
extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('1.png', bbox_inches=extent)
plt.axis('off')
plt.show()
Я пытаюсь нарисовать базовый график с помощью NetworkX на рисунке и сохранить его. Я понял, что без графика это работает, но при добавлении графика я получаю пробел вокруг сохраненного изображения;
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_edge(1,3)
G.add_edge(1,2)
pos = {1:[100,120], 2:[200,300], 3:[50,75]}
fig = plt.figure(1)
img = mpimg.imread("C:\\images\\1.jpg")
plt.imshow(img)
ax=fig.add_subplot(1,1,1)
nx.draw(G, pos=pos)
extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('1.png', bbox_inches = extent)
plt.axis('off')
plt.show()
python
matplotlib
Ахмет Тугрул Байрак
источник
источник
Ответы:
Я не могу утверждать, что точно знаю, почему или как работает мое «решение», но это то, что я должен был сделать, когда хотел построить контур пары секций аэродинамического профиля - без белых полей - в файле PDF. (Обратите внимание, что я использовал matplotlib внутри записной книжки IPython с флагом -pylab.)
Я пытался деактивировать разные части этого, но это всегда приводило к белым полям где-то. Возможно, вам даже придется изменить это, чтобы жирные линии около границ фигуры не были выбриты из-за отсутствия полей.
источник
set_major_locator
нужны были только две линии .pad_inches=0
что другие ответы не упоминают.set_major_locator
был ключом для меня.pad_inches
помог мне.Вы можете удалить заполнение пробелов, установив
bbox_inches="tight"
вsavefig
:Вы должны будете указать аргумент
bbox_inches
в виде строки, возможно, именно поэтому он раньше не работал для вас.Возможные дубликаты:
Сюжеты Matplotlib: удаление осей, легенд и пробелов
Как установить поля для рисунка matplotlib?
Уменьшите левые и правые поля в сюжете matplotlib
источник
fig.savefig()
тоже. (plt.savefig()
не будет работать в этом случае.)bbox_inches
опцию, есть другое значение по умолчанию, которое оставляет некоторое пространство. Если вы действительно хотите избавиться от всего, вам также нужно использоватьpad_inches=0.0
. Конечно, такие жесткие отступы часто обрезают, например, показатели степени ...pad_inches=-0.1
После безуспешных попыток ответить на вышеизложенные ответы (и множество других сообщений в стеке) у меня наконец получилось просто
Важно отметить, что это не включает аргументы bbox или padding.
источник
set_axis_off
. Это не влияет на сохраненное изображение, так как после того,subplots_adjust
как ось лежит вне экстента фигуры, и в любом случае, черта не будет построена. Однако в записных книжках Jupyter необходимо явно отключить ось, поскольку встроенный сервер перезаписывает эти параметры.Я нашел что-то от Арвинда Перейры ( http://robotics.usc.edu/~ampereir/wordpress/?p=626 ) и, похоже, работал на меня:
источник
transparent=True
покажется, что проблем нет, но он просто скроет пустое пространство, размеры изображения не будут в порядке.pad_inches
! Я хотел бы знать об этой опции раньше!pad_inches=.25
Следующая функция включает в себя ответ Йоханнеса выше. Я проверил его
plt.figure
иplt.subplots()
с несколькими осями, и он прекрасно работает.источник
Я обнаружил, что следующие коды отлично работают для этой работы.
источник
я следовал за этой последовательностью, и это работало как очарование.
источник
Для тех, кто хочет работать в пикселях, а не в дюймах, это будет работать.
Плюс обычный тебе тоже понадобится
Тогда вы можете использовать следующее:
источник
fig.dpi
вместо этого вы можете использовать значение по умолчаниюЯ нашел гораздо более простой подход
plt.imsave
:источник
plt.savefig()
.Вы можете попробовать это. Это решило мою проблему.
источник
Это сработало для меня
plt.savefig(save_path,bbox_inches='tight', pad_inches=0, transparent=True)
источник
Если вы хотите отобразить то, что должно быть сохранено, я рекомендую использовать
plt.tight_layout
преобразование, которое на самом деле является более предпочтительным, поскольку оно не приводит к ненужной обрезке при использованииplt.savefig
источник
Это работает для меня, сохраняя массив numpy, построенный с помощью imshow, в файл
источник