使用Visual Studio的Python工具在Visual Studio中使用Matplotlib进行绘图

时间:2015-02-23 16:44:28

标签: python matplotlib ptvs

我不熟悉将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 个答案:

答案 0 :(得分:6)

现在我不知道这在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() 打开互动模式。这样可以直接查看您的绘图,在您发出与其相关的命令后,该绘图会更新。

我相信这是你正在寻找的实际命令。 Here's the manual

答案 1 :(得分:3)

我没有在Visual Studio中完成此操作,但使用Matplotlib,您可以使用对show的非阻塞调用。 draw方法不会阻止,但如果您不通过执行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()

以下是同一主题的related question

我个人使用subplots,如matplotlib示例所示。

答案 2 :(得分:1)

您是否尝试在自己的脚本或Python Interactive窗口中完成此工作?

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

答案 3 :(得分: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');