2

我正在尝试使用 librosa 绘制一些 .wav 数据,但我遇到了一些不寻常的问题,在谷歌搜索“python librosa 错误创建图形 ctxt 对象”时找不到太多

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):
        print "plot_waves:", i
        plt.subplot(10, 1, i)
        librosa.display.waveplot(np.array(f), sr=22050)
        plt.title(n.title())
        i += 1
    print "plot_waves_loop_end"


    plt.suptitle("Figure 1: Waveplot", x=0.5, y=0.915, fontsize=18)

    #THIS LINE CAUSES THE ERROR
    plt.show()

可能与 macOS 相关。

我已经在 virtualenv 和外部尝试过,两种情况都出现同样的错误。

pip install {matplotlib, librosa, numpy} 在 vi​​rtualenv 和外部都显示为不需要更新

错误消息(不断超出此范围并锁定 python - 必须强制退出)

2017-03-24 22:15:03.393 python[62870:25289530] _initWithWindowNumber: error creating graphics ctxt object for ctxt:0x3653b, window:0x9754
2017-03-24 22:15:03.393 python[62870:25289530] _initWithWindowNumber: error creating graphics ctxt object for ctxt:0x3653b, window:0x9754
Mar 24 22:15:03  python[62870] <Error>: CGContextSetFillColorWithColor: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextGetCompositeOperation: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextSetCompositeOperation: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextFillRects: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextSetCompositeOperation: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextGetCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextGetDefaultUserSpaceToDeviceSpaceTransform: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextConcatCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextSetCompositeOperation: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Mar 24 22:15:03  python[62870] <Error>: CGContextSetCompositeOperation: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
4

1 回答 1

0

而不是删除该行(根据您的评论),我认为问题在于dpi设置太高(900 可能是矫枉过正!)。尝试减少它(例如,减少到 30),它应该可以工作。

def plot_waves(sound_names, raw_sounds):
    i = 1
    fig = plt.figure(figsize=(25, 60), dpi=30)  ## changed from 900 to 30
    for n, f in zip(sound_names, raw_sounds):
        print "plot_waves:", i
        plt.subplot(10, 1, i)
        librosa.display.waveplot(np.array(f), sr=22050)
        plt.title(n.title())
        i += 1
    print "plot_waves_loop_end"


    plt.suptitle("Figure 1: Waveplot", x=0.5, y=0.915, fontsize=18)

    plt.show()
于 2017-07-18T01:06:00.723 回答