首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual代码、PyCharm和Thonny运行简单matplotlib演示代码的行为不同

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

Stack Overflow用户
提问于 2022-07-06 22:16:04
回答 2查看 58关注 0票数 0

我想使用Python的matplotlib来显示一些3D和实时的传感器数据。我的出发点是尝试从网络的众多例子中画出正弦波。“你好世界”如果你愿意的话。

首先,我在我相当新鲜的Windows11PC上重新安装了PyCharm。这个设置对于不涉及matplotlib的事情很好。过了一会儿,我得出结论,PyCharm只是没有按照我预期的方式工作,为了好玩,我用Thonny运行了代码(是的,我有几个Raspberry Pis),它的工作就像预期的那样。因为我可以,所以我使用Visual代码2022尝试了相同的代码。它不像PyCharm那样起作用。

PyCharm和VS代码将输出打印的“值”并打开“数字”窗口,但不会显示正弦波图。最终,“数字”窗口会对两者都说“没有回应”。Thonny输出和预期的一样,没有“不响应”的消息。

我看到的唯一不同是,PyCharm和VS代码使用虚拟环境,而Thonny不使用虚拟环境。

我承认我不是抽屉里最锋利的刀子,我会感激你的建议。

编辑--而且,从命令行(Windows终端(管理))运行代码的方式与PyCharm和VS代码的运行方式相同。/Edit

有关守则是:

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

发布于 2022-07-06 22:34:20

我一度对此感到困惑,基本上是因为在屏幕上显示图形--如果直接在机器上运行就容易多了,因为默认情况下,虚拟终端无法访问屏幕。有一些方法可以绕过它,并给予他们这种访问权限(https://virtualizationreview.com/articles/2017/02/08/graphical-programs-on-windows-subsystem-on-linux.aspx),但通常情况下,使用类似CMD之类的东西从Windows本地运行程序就容易多了(或者看起来Thonny为您工作过)。你也可以考虑尝试木星笔记本,这取决于你在做什么。过去,使用像WSL这样的虚拟子系统给我带来了很多问题。

票数 0
EN

Stack Overflow用户

发布于 2022-07-08 20:57:00

我终于找到了一个例子,我可以用它作为我真正想要做的事情的起点。以下示例在所有VS代码、PyCharm和Thonny中都可靠地运行。

那种运动鞋般的小"plt.pause(1e-17)“似乎产生了很大的不同。

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72890439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档