我一直在用matplotlib和scipy绘制光谱图和波形。光谱图(用matplotlib.pyplot.pcolormesh()
绘制)正确保存,如我所示here,代码如下:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap
from matplotlib import cm
from scipy import signal
from scipy.io import wavfile
sample_rate, samples = wavfile.read('audio-mono.wav')
frequencies, times, spectrogram = signal.spectrogram(samples[:700000], sample_rate)
cMap = cm.get_cmap('gray', 3000)
new_colors = cMap(np.linspace(0.5, 1, 3000))
black = [0, 0, 0, 1]
new_colors[0, :] = black
new_cmp = ListedColormap(new_colors)
fig = plt.figure(figsize=(4,2), dpi=400, frameon=False)
plt.pcolormesh(times, frequencies, spectrogram, cmap=cMap)
plt.savefig('spectrogram.png')
但是,当我尝试绘制波形并保存图形时,我会在plots窗格中获得图形(我使用的是Spyder),但图形保存为空白。如果我在Spyder的plots窗格中单击与该图对应的save按钮,我可以成功地保存它并查看它,但我需要知道为什么my code无法正确保存它。这是:
import matplotlib.pyplot as plt
from scipy.io import wavfile
sample_rate, samples = wavfile.read('audio-mono.wav')
fig = plt.figure(figsize=(4,1), dpi=500, frameon=False)
ax = plt.Axes(fig, [2, 2, 2, 2])
ax.set_facecolor((0,0,0))
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('waveform.png')
提前谢谢
编辑1
请注意,我正在将数字大小设置为4x1(英寸)。正在保存的空白图形是2000×500(像素),实际上是正确保存的频谱图的完全相同的大小。我假设这意味着我正在保存用plt.figure()
创建的图形,但不知何故轴没有出现在那里
编辑2
基于被接受为解决方案的答案,我发布了两个具有不同矩形的相同绘图的图形,并将其传递给Axes
实例
首先,我最初使用上面发布的代码创建的图像(使用IDE的“保存”按钮保存)
第二,用另一个矩形(解决方案中建议的矩形)创建的Axes
对象保存的图形ax = plt.Axes(fig, [0, 0, 1, 1])
正如在接受答案的评论中所说,我选择将这个矩形传递给Axes
对象的实例,因为它似乎给了我更好的分辨率
作为轴位置传递的矩形不在图中。从documentation:
因此,您需要证明一个矩形,它在地物坐标中从(0,0)开始,一直延伸到地物的边缘,这意味着高度和宽度为1
因此,改变:
到
相关问题 更多 >
编程相关推荐