Matplotlib savefig обрезка изображения - PullRequest
28 голосов
/ 28 июня 2010

Следующий пример кода создаст базовый линейный график без осей и сохранит его в виде файла SVG:

import matplotlib.pyplot as plt
plt.axis('off')
plt.plot([1,3,1,2,3])
plt.plot([3,1,1,2,1])
plt.savefig("out.svg", transparent = True)

Как установить разрешение / размеры изображения?Есть отступы со всех сторон изображения за пределами линейного графика.Как убрать отступы, чтобы по краям изображения появились линии?

Ответы [ 2 ]

50 голосов
/ 28 июня 2010

Я постоянно удивляюсь, как много способов сделать то же самое в matplotlib.
Таким образом, я уверен, что кто-то может сделать этот код гораздо более кратким.продемонстрируйте, как решить вашу проблему.

>>> import pylab
>>> fig = pylab.figure()

>>> pylab.axis('off')
(0.0, 1.0, 0.0, 1.0)
>>> pylab.plot([1,3,1,2,3])
[<matplotlib.lines.Line2D object at 0x37d8cd0>]
>>> pylab.plot([3,1,1,2,1])
[<matplotlib.lines.Line2D object at 0x37d8d10>]

>>> fig.get_size_inches()    # check default size (width, height)
array([ 8.,  6.])
>>> fig.set_size_inches(4,3) 
>>> fig.get_dpi()            # check default dpi (in inches)
80
>>> fig.set_dpi(40)

# using bbox_inches='tight' and pad_inches=0 
# I managed to remove most of the padding; 
# but a small amount still persists
>>> fig.savefig('out.svg', transparent=True, bbox_inches='tight', pad_inches=0)

Документация для savefig().

3 голосов
/ 28 июня 2010

Объект оси по умолчанию оставляет место для заголовков, меток и т. П. Создайте свой собственный объект оси, который заполняет всю область:

fig=figure()
ax=fig.add_axes((0,0,1,1))
ax.set_axis_off()
ax.plot([3,1,1,2,1])
ax.plot([1,3,1,2,3])
fig.savefig('out.svg')

В формате SVG я не вижу строки, которая находится внизу, но в формате PNG я могу, так что, вероятно, это особенность рендерера SVG. Возможно, вы захотите добавить лишь немного отступов, чтобы все было видно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...