11

我不熟悉将 PTVS 用于我的 Python 代码。我以前使用 Spyder,因为它与 Anaconda 发行版一起提供。这是我遇到的问题。

我正在尝试创建两个图,并同时在单独的窗口中显示它们。一个简单的例子是。

import matplotlib.pyplot as plt 
plt.plot([1,2,3,4,5]) 
plt.show() 
plt.plot([2,2,2,2,2]) 
plt.show()

但是除非我关闭第一个情节,否则第二个情节不会出现。同样,对于较大的脚本,如果我不关闭绘图,则 plt.show() 之后的其余代码块不会执行。我尝试在不调试的情况下执行,但它不起作用。但是,当我在 Ipython 交互式窗口中运行相同的代码时,所有代码都会执行,并且我可以将两个图都视为内联图,但这不是我想要的。我希望所有代码在不同的窗口中运行创建尽可能多的绘图,而不会像关闭绘图以运行其余代码一样中断。我仍然可以在 Spyder 中完成,但我想完全切换到 Visual Studio,这个问题困扰着我。

任何帮助,将不胜感激。提前致谢。

4

4 回答 4

9

现在我不知道这将如何在 VS 中工作,但每当我必须在交互式窗口中制作多个绘图(不保存它们)并且我想将它们全部显示在一起时,这就是我所做的:

fig, ax = plt.subplots()
ax.plot([1,2,3,4,5])
fig1, ax1 = plt.subplots()
ax1.plot([1,2,3,4,5])
plt.show()

请注意,在plt.show(). 要拥有一个不妨碍其余代码的交互式窗口,您必须使用 IPython 或其他启用异步绘图和计算的工具。但是,直接从 Python 解释器中,您将不得不等到终止该行。

plt.ion() 此外,您可以先做其他任何事情来打开交互模式。这可以直接查看您的绘图,在您发出与其相关的命令后会更新。

我相信这是您正在寻找的实际命令。这是手册

于 2015-02-23T16:57:30.583 回答
6

我没有在 Visual Studio 中完成此操作,但使用 Matplotlib,您可以使用对show. 该draw方法不会阻塞,但如果您不通过执行 a 来结束调用,show则图形窗口将立即关闭。

import matplotlib.pyplot as plt
plt.figure(1)
plt.plot([1,2,3,4,5]) 
plt.show(block=False)

# Create a new figure to show the extra information.
# http://matplotlib.org/users/pyplot_tutorial.html#working-with-multiple-figures-and-axes
plt.figure(2)
plt.plot([2,2,2,2,2]) 
plt.show()

这是关于同一主题的相关问题。

我个人使用matplotlib示例subplots中所示的方法。

于 2015-02-23T16:59:57.700 回答
1

您是想在自己的脚本中还是在 Python 交互窗口中完成这项工作?

如果是后者,那么您应该在工具 -> 选项 -> Python 工具 -> 交互窗口 -> 交互模式中为其启用 IPython 模式(默认为“标准”;将其更改为“IPython”,并确保如果您安装了多个 Python,则在“显示设置”组合框中选择了正确的 Python)。然后你根本不需要plt.show,因为plt.plot会立即在交互式窗口中直接显示内联绘图。

于 2015-02-23T17:50:37.513 回答
0

我可以向您推荐一个我出于类似原因一直在研究的开源工具。我想在调试时一个接一个地看图,而不是处理关闭窗口或特定环境......

这个答案并不能直接帮助您使用 Matplotlib,而是建议另一种解决相同问题的方法。我在 Matplotlib 或 IPython 和类似工具中发现的问题是它们通常非常受限于某些环境(比如在你的情况下,IDE)。此外,这些工具通常难以控制您自己的显示要求(或需要很多时间)。

HypnoLog可以帮助您绘制来自 Python 或任何其他语言的任何数据。它将在网络浏览器中一个接一个地在同一页面上显示图(如日志)。由于 HypnoLog 使用浏览器显示图表,您可以轻松地使用网络上可用的任何其他工具来显示图表或创建您自己的图表。

特别是对于 Python,已经有一个语言包装器,请参阅HypnoLog-Python。要绘制数值数组,您可以使用内置的可视化plot

这是它在 Python 中的样子:

import hypnolog as HL
HL.log([1,2,3,4,5], 'plot');
于 2018-11-04T21:41:47.150 回答