运行简单的matplotlib演示代码时,Visual Stdio代码、PyCharm和Thonny的行为不同

lkaoscv7  于 2022-11-08  发布在  PyCharm
关注(0)|答案(2)|浏览(265)

我想用Python的matplotlib来真实的显示一些3D传感器数据。我的出发点是尝试从网络上的许多例子中画出一个正弦波。如果你愿意的话,可以说是“Hello World”。
我在我刚刚安装了Windows 11的PC上安装了PyCharm。这个安装程序在不涉及matplotlib的情况下运行得很好。过了一段时间,我得出结论,PyCharm只是没有按照我预期的方式运行,为了好玩,我用Thonny运行了代码(是的,我有几个Raspberry Pis),它和预期的一样工作。只是因为我可以,我用Visual Studio Code 2022尝试了同样的代码。它的工作方式和PyCharm不一样。
PyCharm和VS代码会输出打印的“值”,并打开“图形”窗口,但不会显示正弦波图。最终,“图形”窗口会显示两者都“没有响应”。Thonny的输出与预期一致,没有“没有响应”消息。
我看到的唯一区别是PyCharm和VS代码使用虚拟环境,而Thonny没有。
我承认我不是抽屉里最锋利的刀,我会感激你的建议。
编辑--同样,从命令行运行代码(Windows终端(管理员)的操作方式与PyCharm和VS代码相同。/编辑
问题代码是:

import numpy as np
import time
import matplotlib.pyplot as plt

figure, ax = plt.subplots(figsize=(4,5))
x = np.linspace(0, 20, 80)
y = np.sin(x)

plt.ion()
plot1, = ax.plot(x, y)
plt.xlabel("X-Axis",fontsize=18)
plt.ylabel("Y-Axis",fontsize=18)

for value in range(25):
    update_y_value = np.sin(x-2.5*value)

    plot1.set_xdata(x)
    plot1.set_ydata(update_y_value)

    figure.canvas.draw()
    figure.canvas.flush_events()
    time.sleep(0.05)
    print(value)

plt.show()
4ioopgfo

4ioopgfo1#

我一度对此感到困惑,基本上对于在屏幕上显示图形来说,如果直接在机器上运行会容易得多,因为默认情况下虚拟终端没有访问屏幕的权限。(https://virtualizationreview.com/articles/2017/02/08/graphical-programs-on-windows-subsystem-on-linux.aspx),但通常情况下,使用CMD之类的工具从Windows本地运行程序要容易得多(或者看起来Thonny为你工作过)。你也可以根据你的工作来考虑试用Jupyter Notebook。使用像WSL这样的虚拟子系统在过去给我带来了很多问题。

cdmah0mi

cdmah0mi2#

我终于找到了一个示例,可以将其作为我真正想做的事情的起点。下面的示例在所有VS代码、PyCharm和Thonny IDE中都能可靠地运行。
那个鬼鬼祟祟的小“plt.pause(1 e-17)”似乎有很大的不同。

import numpy as np
import matplotlib.pyplot as plt

xdata = []
ydata = []

axes = plt.gca()
axes.set_xlim(0, 100)
axes.set_ylim(-2, +2)
line, = axes.plot(xdata, ydata, 'r-')

x = np.linspace(0, 19, 100)
y = np.sin(x)

plt.xlabel("X-Axis", fontsize=18)
plt.ylabel("Y-Axis", fontsize=18)

for value in range(100):
    xdata.append(value)
    ydata.append(y[value])
    line.set_xdata(xdata)
    line.set_ydata(ydata)
    plt.pause(1e-17)

plt.show()

相关问题