Matplotlib savefig图像修剪

7uzetpgm  于 2023-10-24  发布在  其他
关注(0)|答案(3)|浏览(138)

下面的示例代码将生成一个没有轴的基本线图,并将其保存为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)

如何设置图像的分辨率/尺寸?在图像的所有边都有填充,超出了线条图。如何删除填充,以便线条出现在图像的边缘?

vpfxa7rd

vpfxa7rd1#

我经常惊讶于在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()的文档。

qyyhg6bp

qyyhg6bp2#

默认的轴对象为标题、刻度标签等留出了一些空间。创建您自己的轴对象,填充整个区域:

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渲染器的一个特性。你可能想添加一点填充来保持所有内容可见。

vjrehmav

vjrehmav3#

一个非常简单的方法来削减大多数填充是调用tight_layout()之前保存的数字。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 200)

fig, ax = plt.subplots()
ax.plot(x, np.sin(x))

fig.tight_layout()
fig.savefig('plot.pdf')

相关问题