使用 Matloptlib 将图像(只有内容,没有坐标轴或其他任何东西)保存到文件中

Save an image (only content, without axes or anything else) to a file using Matloptlib

我想从 wav 文件中获取频谱图,然后将其保存为 png,但我只需要图像的内容(不需要坐标轴或其他任何内容)。我遇到了这些问题
Matplotlib plots: removing axis, legends and white spaces
scipy: savefig without frames, axes, only content
我也读过 the Matplotlib documentation 但它似乎没用所以上面问题的答案已经过时或者我做错了什么因为简单

plt.savefig('out.png', bbox_inches='tight', pad_inches=0)

没有达到我想要的效果。最初我尝试遵循 this guide but the code crashes. Then I tried this approach,但由于它已过时,我对其进行了一些修改:

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

def graph_spectrogram(wav_file):
    rate, data = wavfile.read(wav_file)
    pxx, freqs, bins, im = plt.specgram(x=data, Fs=rate, noverlap=384, NFFT=512)
    plt.axis('off')
    plt.savefig('sp_xyz.png', bbox_inches='tight', dpi=300, frameon='false')

if __name__ == '__main__': # Main function
    graph_spectrogram('...')

这是我得到的:
也许它不可见,但内容周围有一个白色边框(从最大到最小):左、下、上、右。我想要相同的图像,但只是内容而没有其他任何东西。我怎样才能做到这一点?我使用 python 3.6 和 Matplotlib 2.0.2.

我想你想要 subplots_adjust:

fig,ax = plt.subplots(1)
fig.subplots_adjust(left=0,right=1,bottom=0,top=1)
ax.axis('tight')
ax.axis('off')

在这种情况下:

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

def graph_spectrogram(wav_file):
    rate, data = wavfile.read(wav_file)
    fig,ax = plt.subplots(1)
    fig.subplots_adjust(left=0,right=1,bottom=0,top=1)
    ax.axis('off')
    pxx, freqs, bins, im = ax.specgram(x=data, Fs=rate, noverlap=384, NFFT=512)
    ax.axis('off')
    fig.savefig('sp_xyz.png', dpi=300, frameon='false')

if __name__ == '__main__': # Main function
    graph_spectrogram('...')

可能对使用 librosa 最新版本的人有帮助。

您可以在 plt.savefig() 函数中添加 transparent=True 来设置透明背景。但问题仍然是 x 和 y 轴信息是可见的。母鸡,您需要使用 ax.set_axis_off()

删除轴细节

您可以通过注释掉 plt.colorbar()

来删除右侧的颜色条
plt.figure(figsize=(12, 4))
ax = plt.axes()
ax.set_axis_off()
plt.set_cmap('hot')
librosa.display.specshow(librosa.amplitude_to_db(S_full[:, idx], ref=np.max), y_axis='log', x_axis='time',sr=sr)
plt.colorbar()
plt.savefig(f'{args["output"]}/{name}_{i}.png', bbox_inches='tight', transparent=True, pad_inches=0.0 )

请点击图片查看差异

什么都不改变时(默认)

当轴信息关闭时 使用ax.set_axis_off()

这里,这张图片没有轴信息,但有白色背景。

启用透明时使用transparent= True

这里,这张图片没有白色背景,但有轴信息。

关闭轴信息并启用透明

这张图片既没有白色背景也没有轴信息

您可能看不到确切的差异,因为上传时图片可能会发生变化。