PyCharm无法正确打开matplotlib图表

25
我有一个关于PyCharm和matplotlib的问题,我似乎无法纠正。
当我使用PyCharm和ipython作为命令解释的控制台时,绘图直到我保存图像才会显示。但是,当我尝试从PyCharm外部绘图时,这种情况不会发生。
以下是一个在PyCharm中失败的示例过程:
In[2]: import matplotlib.pyplot as plt
Backend MacOSX is interactive backend. Turning interactive mode on.

In[3]: plt.plot([1,2,3,4],[1,4,9,16], 'ro')

这将打开一个标签为“Figure 1”的窗口。但是,没有绘图出现,并且当鼠标悬停在其上时,它会切换到SPOD(我使用的是Mac)。此时,我可以尝试...
In[4]: plt.show()

但是仍然没有情节出现。然而,如果我接着做:

In[5]: plt.savefig('foo.png')

不仅图像以该名称保存,而且绘图出现在“Figure 1”窗口中。请注意,PyCharm已设置交互模式,并且已识别出我的后端应该是MacOS。我已经通过python和ipython控制台,在通用终端会话中甚至通过emacs使用了相同的过程,在所有情况下,在调用plt.plot()行时绘图都会出现。不需要plt.show()调用。实际上,我甚至可以通过PyCharm使用终端并获得所需的绘图。一种答案是我应该只使用这些方法进行绘图并忽略PyCharm。但是假设我认为PyCharm的“花哨功能”非常吸引人,因此我真的想将其用作我的IDE,但希望能够检查绘图而无需经过plt.savefig()的麻烦(因为我不想保留我尝试的每个绘图)。
我还尝试通过plt.switch_backend()切换后端。 我已经尝试了所有列出的选项,但由于没有安装某些软件包或在错误的系统上,大多数选项都失败了。 我没有尝试安装任何东西来使用新的后端,因此我不知道另一个正确安装的后端是否会解决这个问题。 当然非常愿意尝试!
系统详细信息:
MacBookPro Retina中期2012年,16GB内存,Yosemite 10.10
Python 3.4.2
ipython 2.3.1
PyCharm社区版4.0.4
请注意,我已查看并尝试了以下问题的各种修复程序的变化: Python plots won't open How to switch backends in matlab/python PyCharm + Matplotlib?

Matplotlib图表卡住了(灰色窗口)

尽管我调用了pyplot.show(),但matplotlib没有显示我的绘图

编辑 如下方评论所述,这似乎是一个错误,而不是我设置失败。因此,我修改了这个问题,询问是否有已知的解决方法。


3
我已经在OSX 10.10上使用Pycharm 4.0 Pro复制了这个行为。根据https://youtrack.jetbrains.com/issue/PY-14547,这似乎是Pycharm的Python控制台内部问题。 - Jason
1
使用PyCharm自带的IPython控制台(而不是它提供的终端)对我来说最大的价值在于交互式地发送代码片段进行评估。仅使用终端需要在终端中完全工作以输入,然后评估我想尝试的代码片段,或者从编辑器窗口复制并粘贴它们。 - Savage Henry
1
Python绑定gnuplot可能是一种替代方法... http://gnuplot-py.sourceforge.net/ - Jason
6
看起来已经实现了修复,并将包含在下一个更新中。 - Jason
@Jason 我建议您添加一个答案,因为这个问题似乎仍然是开放的。看起来有一个合适的解决方案可用(即更新)。 - Juan Carlos Coto
显示剩余9条评论
1个回答

2

在OS X下,PyCharm(包括最新版本v5)存在一个已知问题,这是由于Python在OS X上的安装方式造成的。

大多数人使用brew安装Python 2和3,并将默认的Python解释器替换为可以从命令行中使用的解释器。但是,GUI应用程序没有替换默认的解释器和pip可执行文件。

如果想要得到更具体的答案,您需要使用以下方法来正确记录您的环境:

  • 从命令行执行 which -a python
  • 从命令行执行 which -a pip
  • 从PyCharm和控制台中分别执行 print(sys.path)print(os.env) ,并进行比较。

通过这样做,您可能会发现加载了错误版本的模块。


我在 Mac OsX 10.11 上使用 PyCharm Community Edition 2016.2,搭配 IPython 5.0 和 python 3.5.2 解释器。我已经检查了所有路径,它们都匹配,但问题仍然存在。我可以通过 plt.figure() 打开一个图形,但只会得到 SPOD。调用plt.plot() 显示线对象,但不会绘制到窗口中(无论之前是否有)。此后控制台似乎非常缓慢。使用的后端是 MacOSX。 - jspencer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接