matplotlib 保存一个图像(只有内容,没有轴或其他任何东西)到一个文件使用Matloptlib

ig9co6j1  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(155)

我想从wav文件中获取一个声谱图,然后将其保存到png中,但我只需要图像的内容(而不是轴或其他任何内容)。
Matplotlib plots: removing axis, legends and white spaces
scipy: savefig without frames, axes, only content
我也读过Matplotlib文档,但它似乎没有用,所以要么是上面问题的答案已经过时,要么是我做错了,因为简单
plt.savefig('out.png', bbox_inches='tight', pad_inches=0)
不做我想实现的。最初我试图遵循this guide,但代码崩溃。然后我尝试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。

sgtfey8w

sgtfey8w1#

我想你想要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('...')
ulmd4ohb

ulmd4ohb2#

可能对使用librosa最新版本的人有帮助。
你可以在 plt.savefig() 函数中添加transmartar =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()

在这里,这个图像没有轴信息,但有白色背景。

启用透明时使用 * 透明= True*

在这里,这个图像没有白色背景,但轴信息在那里。

关闭轴信息并启用透明

此图像没有白色背景或轴信息

您可能无法看到确切的差异,因为上传时图像可能会更改。

相关问题