Matplotlib plt.show(block=False)打开黑色窗口

Matplotlib plt.show(block=False)打开黑色窗口

plt.show(block=False)在绘制通常可以使用的图形时,Matplotlib会给我一个黑色的窗口plt.show(block=True)。使用我之前的 Ubuntu 安装,我总是可以plt.show(block=False)毫无问题地运行。

下面是一段导致屏幕变黑的简单代码:

y = np.random.random(10)
x = np.linspace(1, len(y), len(y))
plt.plot(x, y)
plt.show(block=False)
time.sleep(5)

当我使用时,图表显示正确block=True,但使用上述代码时会显示黑色窗口。这在 Python 3 控制台和 IPython 中都会发生。

额外的信息:

  • 全新安装 Ubuntu 20.04.4。
  • Python 3.8.10。
  • Matplotlib 版本 3.5.1。
  • 使用后端测试:[QtAag、Qt5Aag、TkAgg],结果相同。

任何帮助都将不胜感激。我主要使用该block=False参数在图表上放大等时查看/分析数据。

答案1

即使在 Ubuntu 20.04 和 18.04 上使用 Python 3.8 和 Matplotlib 3.5.0 时,也遇到了同样的问题plt.ion()。我注意到,只有在运行以下 Python 脚本时才会遇到此问题:

 python myscript.py 

如果我在 Python 控制台中向同一个解释器输入直接命令,则绘图正常。

我还注意到,用 刷新轴时set_ydata,操作系统会看到图形处于待处理状态,并不断要求强制退出或等待,这很烦人。

我设法通过完全删除该呼叫解决了该问题plt.show()。以下是一个例子:

import matplotlib
print(matplotlib.get_backend())
matplotlib.use('Qt5Agg')

from matplotlib import pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np

plt.ion()
gs = gridspec.GridSpec(2, 1, height_ratios=[6, 1])
fig = plt.figure(figsize=(9, 6), facecolor='w')
plt.pause(0.1)
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1])
line, = ax1.plot(np.arange(1024), np.arange(1024), color='w')
ax1.set_xlim(0, 400)
ax1.set_xlabel("MHz")
ax1.set_ylim(-100, 10)
ax1.set_ylabel("dB")
ax1.grid(True)
ax1.set_title("Starting Measurements...")
ax2.plot(range(100), color='w')
ann1 = ax2.annotate("Foundamental Tone Frequency: - MHz", (1, 72), fontsize=12)
ann2 = ax2.annotate("Foundamental Tone Power: - dBFS", (1, 27), fontsize=12)
ax2.set_axis_off()
fig.tight_layout()
fig.canvas.draw()
fig.canvas.flush_events()

并且在循环中必须重新绘制轴:

line.set_ydata(spectrum)
line.set_color('b')
ann1.set_text("Foundamental Tone Frequency: %3.1f MHz" % tone_freq)
plt.draw()
fig.canvas.draw()
fig.canvas.flush_events()

相关内容