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()