首页 > 解决方案 > 如何在 matplotlib.pyplot 中保存没有边框/边距的图形?

问题描述

我知道这里有一个非常相似的问题。但是,我尝试了那里发布的所有可能的解决方案,但绝对没有一个对我有用。这就是我提出这个问题的原因。

这就是我所拥有的:

import matplotlib.pyplot as plt
from scipy.io import wavfile

sample_rate, samples = wavfile.read('audio-mono-70.wav')

fig = plt.figure(figsize=(6,1), dpi=500, frameon=False)
ax = plt.Axes(fig, [0,0,1,1])
ax.set_facecolor((0.169,0.169,0.169))
ax.set_xlim(left=0, right=700000)
fig.add_axes(ax)
plt.tick_params(axis='both', which='both', bottom=False,
                top=False, left=False, right=False,
                labelbottom=False, labeltop=False,
                labelright=False, labelleft=False)
plt.plot(samples)
plt.savefig('samples.png')

有了这个,我得到了我想要的一切,除了那些边距的存在。这里是。

在此处输入图像描述

我想要的是这样的东西。我手动修改了这张图片,只是为了向您展示我需要的东西。我需要图像没有那些小边距。我正在设置 x 限制,因为我希望绘图到达图像的左右边界,但是黑色边距妨碍了。

在此处输入图像描述

使用bbox_inches='tight'and pad_inches=0, 似乎在较新版本的 matplotlib 中不起作用,并且 usingplt.savefig(fname, bbox_inches='tight', transparent=True, pad_inches=0)对我也不起作用。我得到完全相同的结果。也尝试了extent = mpl.transforms.Bbox(((0, 0), (width, height)))然后bbox_inches=extent,但仍然没有。那个帖子里的都没有。

我怎样才能做到这一点?

提前致谢。

编辑 1

添加了代码以创建与创建绘图完全相同的数组。

在这里找到完全相同的音频

编辑 2

最初的 rgb 值将其ax.set_facecolor()设置为黑色,但图像具有灰色的 facecolor。在此编辑中修复。

标签: pythonmatplotlib

解决方案


我在其他地方得到了帮助,这些边界/边距被称为刺。

在我的情况下,它们以下列方式被删除:

ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['bottom'].set_visible(False)

推荐阅读