【问题标题】:Setting width and height for creating a specgram using matplotlib使用 matplotlib 设置宽度和高度以创建谱图
【发布时间】:2021-06-09 02:37:31
【问题描述】:

我正在尝试使用自定义宽度和高度绘制频谱图,但是当我运行以下代码时,它会引发以下错误,但是当我删除自定义宽度和高度时它工作正常,但它会在 515x389 中创建频谱图

代码:

 filename = path
x, sr = librosa.load(filename, mono=True)
widthHeight = (432, 288)
plt.figure(figsize=widthHeight)
plt.specgram(x, NFFT=2048, Fs=2, Fc=0, noverlap=128, cmap='inferno', sides='default', mode='default', scale='dB')
plt.axis('off')
plt.savefig("spec.png", bbox_inches='tight', transparent=True)
plt.clf()

错误

_tkinter.TclError: not enough free memory for image buffer

【问题讨论】:

  • 宽度和高度是以英寸为单位的图形大小。你正在制作一个 10 米 x 8 米的人形,让你的记忆超载。
  • @JodyKlymak 如果我想将其转换为 432 像素 bv 288,那么转换率是多少?
  • 默认每英寸 72 像素
  • @JodyKlymak 感谢您进行数学计算。挺好玩的
  • 英寸到像素由 dpi(每英寸点数)设置。默认值通常为 100。但您可以在 plt.savefig(..., dpi=200) 中指定。如果您想指定具有一定数量像素的图形,您只需要知道您将使用的 dpi。也可以使用默认值,所以widthHeight=(4.32, 2.88) 应该会得到一个 432x288 像素的图形。但是请注意,坐标轴不是 432x288 像素,整个图都是。

标签: python matplotlib librosa spectrogram


【解决方案1】:

宽度和高度是以英寸为单位的图形大小。我正在制作一个 10 米 x 8 米的人偶,让你的记忆超负荷了

filename = path
x, sr = librosa.load(filename, mono=True)
widthHeight = (5.32, 3.49)
plt.figure(figsize=widthHeight)
plt.specgram(x, NFFT=2048, Fs=2, Fc=0, noverlap=128, cmap='inferno', sides='default', mode='default', scale='dB')
plt.axis('off')
plt.savefig("spec.png", bbox_inches='tight', transparent=True)
plt.clf()

【讨论】:

    【解决方案2】:

    如果您只想将频谱图数据保存为图像,请参阅How can I save a Librosa spectrogram plot as a specific sized image?

    如果您想要绘图但使用 librosa 而不是 matplotlib 来计算频谱图,请参阅 this answer。这允许使用 mel-spectrograms 等,在机器学习等方面常见且性能更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 2012-03-01
      • 2014-06-21
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2016-02-07
      相关资源
      最近更新 更多