2017-03-01 94 views
1

参考此链接:https://aqibsaeed.github.io/2016-09-03-urban-sound-classification-part-1/,我试图做出同样的波纹图,但是,我得到了如下图:Waveplot如何使用matplotlib使用librosa很好地显示波浪图

我运行这些蟒蛇代码:

def plot_waves(sound_names, raw_sounds): 
    i = 1 
    fig = plt.figure() 
    for n, f in zip(sound_names, raw_sounds): 
     plt.subplot(10, 1, i) 
     librosa.display.waveplot(np.array(f), sr=22050) 
     plt.title(n.title()) 
     i += 1 
    plt.suptitle("Figure 1: Waveplot", x=0.5, y=0.915, fontsize=18) 
    plt.show() 

任何想法如何改进以达到相同的图所示的链接?谢谢。

回答

1

从您发布的链接,该plot_waves功能如下复制。

注意figsizedpi参数传递给plt.figurefigsize=(25,60)指定图的(宽度,高度)。 dpi当然指定了分辨率。使用这些参数将增加您的身材尺寸并解决似乎是问题的“挤压”外观。

因为你的身材标题重叠的第一轴标题,你还需要为标题的plt.suptitle位置指定参数。不是plt.suptitle中的xy值分别是左侧和底部图像大小的分数。所以x=0.5水平地指定了图中间的标题位置,并且y=0.915从图的底部指定了总高度的91.5%的垂直位置。

,直到你得到一个阴谋,看起来你的权利总觉得这些设置玩。

def plot_waves(sound_names, raw_sounds): 
    i = 1 
    fig = plt.figure(figsize=(25,60), dpi = 900) 
    for n,f in zip(sound_names,raw_sounds): 
     plt.subplot(10,1,i) 
     librosa.display.waveplot(np.array(f),sr=22050) 
     plt.title(n.title()) 
     i += 1 
    plt.suptitle("Figure 1: Waveplot",x=0.5, y=0.915,fontsize=18) 
    plt.show() 
+0

我不采取样本代码特别是对于图= plt.figure(figsize =(25,60),DPI = 900),因为,它抛出异常:_tkinter.TclError:对于没有足够的可用存储器图像缓冲区。对我来说有两个问题:1)。 suptitle压扁的样子。 2)小区的数字相互重叠。无法尝试找出合适的参数。 –

+0

尝试摆脱'dpi = 900'参数并使用'fig = plt.figure(figsize =(25,60))'代替。这听起来像是你试图为你的机器加载过多的内存,如果你只是想看看屏幕上的图像,dpi设置是不重要的。问题(1)将通过调整“plt.suptitle”中的y位置来解决,如上所述。如果'y = 0.915'不起作用,请尝试'y = 0.93'等等。问题(2)将通过使用'figsize =(width,height)'参数来增加图形相对于宽度的高度来解决。 – Brian