【问题标题】:Pycharm does not show plotPycharm不显示情节
【发布时间】:2014-09-13 05:29:55
【问题描述】:

Pycharm 不显示以下代码中的绘图:

import pandas as pd
import numpy as np
import matplotlib as plt

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))

ts = ts.cumsum()    
ts.plot()

发生的情况是一个窗口出现了不到一秒钟,然后又消失了。

在绘图按预期显示的相同代码上使用 Pyzo IEP IDE(使用相同的解释器)。

...所以问题一定出在 Pycharm 上的某些设置上。 我尝试使用 python.exe 和 pythonw.exe 作为解释器,结果相同。

这是我的系统信息:

C:\pyzo2014a\pythonw.exe -u C:\Program Files (x86)\JetBrains\PyCharm Community Edition 3.4.1\helpers\pydev\pydevconsole.py 57315 57316
PyDev console: using IPython 2.1.0import sys; print('Python %s on %s' % (sys.version, sys.platform))
Python 3.4.1 |Continuum Analytics, Inc.| (default, May 19 2014, 13:02:30) [MSC v.1600 64 bit (AMD64)] on win32
sys.path.extend(['C:\\Users\\Rasmus\\PycharmProjects\\untitled2'])
In[3]: import IPython
print(IPython.sys_info())
{'commit_hash': '681fd77',
 'commit_source': 'installation',
 'default_encoding': 'UTF-8',
 'ipython_path': 'C:\\pyzo2014a\\lib\\site-packages\\IPython',
 'ipython_version': '2.1.0',
 'os_name': 'nt',
 'platform': 'Windows-8-6.2.9200',
 'sys_executable': 'C:\\pyzo2014a\\pythonw.exe',
 'sys_platform': 'win32',
 'sys_version': '3.4.1 |Continuum Analytics, Inc.| (default, May 19 2014, '
                '13:02:30) [MSC v.1600 64 bit (AMD64)]'}

【问题讨论】:

  • plt.pyplot.show() 工作吗?
  • 它没有。当完全运行“plt.pyplot.show()”时,它不起作用。我应该写别的东西而不是'pyplot'吗? (这里是菜鸟)。
  • 在pycharm中运行代码会发生什么?
  • 当我运行文件时,同样的事情发生了:一个窗口迅速出现并消失,控制台打印:进程以退出代码 0 完成。当我将它发送到控制台时,窗口出现并停留但没有绘制任何内容在窗口,它只是白色的。窗口的标签是“Figure 1 (Not Responding)”
  • 如果从 IDE 内部运行代码,请使用 plt.waitforbuttonpress()。该图将弹出并等待用户单击新窗口。只有这样它才能恢复程序并运行其余代码。

标签: python matplotlib pycharm


【解决方案1】:

随便用

import matplotlib.pyplot as plt
plt.show()

此命令告诉系统在 Pycharm 中绘制绘图。

例子:

plt.imshow(img.reshape((28, 28)))
plt.show()

【讨论】:

  • 这真是太棒了——这对我有用,而其他人都没有。令人惊讶的是,我在 Jupyter Notebook 中不需要 plt.show(),不知道为什么 PyCharm 中的行为不同
  • 这里也一样。我在 Jupyter Notebook 中不需要它
  • 我也总是忘记调用它。这告诉系统在 pycharm 中实际绘制它。 Notebook 默认会自动调用绘图和打印函数。我认为这样做是为了更快地制作原型。
  • 可能是你在笔记本中不需要它,因为你做了类似%matplotlib inline 的事情。 @CGFox,draw 是为了显式渲染到内存而不是显示到屏幕(或文件)。您需要 plt.pause(0.1) 来显示绘图,或者在代码中的其他位置调用 plt.show(pause=True) 来让它们渲染
  • 我错了,还是这个答案在技术上是错误的?他使用import matplotlib as plt,所以它应该是plt.pyplot.show() 或注释,我们使用常见的import matplotlib.pyplot as plt!?
【解决方案2】:

我意识到这已经过时了,但我想我会澄清其他旅行者的误解。将plt.pyplot.isinteractive() 设置为False 意味着将在特定命令上绘制绘图(即plt.pyplot.show())。将plt.pyplot.isinteractive() 设置为True 意味着每个pyplot (plt) 命令都会触发一个绘图命令(即plt.pyplot.show())。因此,您很可能在程序末尾寻找 plt.pyplot.show() 来显示图表。

作为旁注,您可以使用以下导入命令 import matplotlib.pyplot as plt 而不是 matplotlib as plt 稍微缩短这些语句。

【讨论】:

  • 将 plt.show(block=True) 添加到我的函数末尾对我有用。谢谢你的澄清。 (Python 3.x、PyCharm 2016.1.4、Ubuntu)
  • 这对我有用(Python 2.7、Pycharm 2016.3、Ubuntu 16.04):“import matplotlib.pyplot as plt”,然后从 DataFrame 中绘制函数图,如“corr_data[col].plot( kind="bar", figsize=(8, 5), grid=True, color="r", title=col)" 离开函数之前,"plt.show()"
【解决方案3】:

我遇到了同样的问题。检查plt.isinteractive() 是否为真。将其设置为 'False' 对我有帮助。

plt.interactive(False)

【讨论】:

  • 调用 plt.show(block=True) 帮助我显示了一次图表。但是即使在关闭图表窗口后控制台也被阻止了。
  • plt.interactive(False) 在 PyCharm 中为我做的
  • 我不再安装 Python,所以我不知道它是否适合我,但由于它适用于其他人,我会接受这个答案(我希望根据堆栈溢出规则)
  • 正确的解决方案是设置 plt.show(block=True) 正如@charlie 在下面建议的那样。添加此行后, plt.interactive() 标志的值与正在显示的绘图无关。
  • 这对我不起作用` for cluster_id in range(len(tempx[0])): plt.plot(tempx, tempy, 'rx--', markersize=8) plt.图例(loc=4, framealpha=0.5) plt.interactive(False) plt.show(block=True)`
【解决方案4】:

我尝试了不同的解决方案,但最终对我有用的是plt.show(block=True)。您需要在myDataFrame.plot() 命令之后添加此命令才能生效。如果您有多个情节,只需在代码末尾添加命令。它将允许您查看正在绘制的每个数据。

【讨论】:

  • 这是为我做的。应该是公认的答案。与 plt.interactive() 搞混什么也没做
  • 我同意,因为这对我也有帮助。将交互模式设置为 False 并将“DISPLAY=TRUE”添加到环境变量没有帮助。
【解决方案5】:
import matplotlib
matplotlib.use('TkAgg')

为我工作。 (PyCharm/OSX)

【讨论】:

  • 当plt.show() 在较新版本的 PyCharm (2020.1) 中不再有帮助时,这也适用于 Windows 10。
  • 我也是。有趣的是,在 Pycharm CE 中它可以在没有它的情况下工作,但在 Pro (2020.1) 中 matplotlib.use('TkAgg') 是唯一有帮助的东西。有什么意义?
【解决方案6】:

我在我的 Pycharm 版本(社区版 2017.2.2)中进行测试,您可能需要同时宣布 plt.interactive(False) 和 plt.show(block=True) 如下:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 6.28, 100)

plt.plot(x, x**0.5, label='square root')
plt.plot(x, np.sin(x), label='sinc')

plt.xlabel('x label')
plt.ylabel('y label')

plt.title("test plot")

plt.legend()

plt.show(block=True)
plt.interactive(False)

【讨论】:

  • 很抱歉听到这个消息。我发现它也适用于 Pycharm 2017.3(社区版)。可以尝试使用新版本的 Pycharm 吗?
  • 嗨,Saria,很抱歉。我在带有 Ubuntu OS 的 Pycharm 2018.1.2(社区版)中对其进行了测试。它也有效。
  • 嗨,它适用于带有 MacOs Catalina 的 Pycharm 2019.3
【解决方案7】:

我找到了解决办法。这对我有用:

import numpy as np
import matplotlib.pyplot as plt

points = np.arange(-5, 5, 0.01)
dx, dy = np.meshgrid(points, points)
z = (np.sin(dx)+np.sin(dy))
plt.imshow(z)
plt.colorbar()
plt.title('plot for sin(x)+sin(y)')
plt.show()

【讨论】:

  • 但我现在面临一个新问题。在新窗口中生成绘图后,我在绘图后添加的新代码不会运行,直到我关闭新打开的窗口。
  • 问题中缺少的重要行是 plt.show()
【解决方案8】:

以上方法都不适合我,但以下方法对我有用:

  1. 在 pycharm settings > Tools > Python Scientific 中禁用复选框(在工具窗口中显示绘图)。

  2. 我收到了错误No PyQt5 module found。继续安装PyQt5 使用:

    sudo apt-get install python3-pyqt5
    

请注意,对于某些人来说,仅第一步就足够了。

【讨论】:

  • 请更清楚地表明第一步仍然是解决方案,因为它对我有用。如此说来,@amir1122 的另一个重复回答有权存在。当然,这也可以,而且你仍然得到我的支持。
  • @Lorenz。根据您的建议进行更新,这是有道理的。
  • 第 1 步有效,但感觉像是一种解决方法。我怀疑我的情况是因为我有多个版本的 Python(3.6、3.7 和 3.8)浮动。
  • 我只是取消选中该框,然后它显示一个用于快速显示的窗口并消失了。之后我添加了 plot.waitforbuttonpress() 现在它完美地工作了
【解决方案9】:

打电话后不久

plt.imshow() 

打电话

plt.show(block = True)

您将获得带有图像的 matplotlib 弹出窗口。

这是一种阻塞方式。在弹出窗口关闭之前,其他脚本不会运行。

【讨论】:

  • 这就是我要找的。​​span>
【解决方案10】:

对我来说,问题在于 matplotlib 使用了错误的后端。我正在使用 Debian Jessie。

在控制台中,我执行了以下操作:

import matplotlib
matplotlib.get_backend()

结果是:'agg',而这应该是 'TkAgg'。

解决方法很简单:

  1. 通过 pip 卸载 matplotlib
  2. 安装相应的库:sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. 再次通过 pip 安装 matplotlib。

【讨论】:

    【解决方案11】:

    加plt.pyplot.show()就好了。

    最好的解决方案是禁用 SciView。

    【讨论】:

      【解决方案12】:

      我在 PyCharm 2017.1.2 上的版本中进行了测试。我使用了交互式 (True) 和显示 (block=True)。

      import pandas as pd
      import numpy as np
      import matplotlib.pyplot as plt
      ts = pd.Series(np.random.randn(1000), index=pd.date_range('1//2000',periods=1000))
      ts = ts.cumsum()
      plt.interactive(True)
      ts.plot()
      plt.show(block=True)
      

      【讨论】:

        【解决方案13】:

        我有这个问题,我可以解决它,你可以测试我的方式.. 从设置中禁用“在工具窗口中显示绘图”-->工具-->python科学

        【讨论】:

        • 两年前已经提供了这个答案(例如stackoverflow.com/a/52221178/466862)。在回答较老的问题时,请确保您要么回答新的、不同的解决方案,要么回答明显更好的解释。
        • 这是在重复@AbdulRehmanLiaqat 的回答,但它至少清楚地表明这可能是一个可能的解决方案。由于重复,我首先对此表示反对。现在我投了赞成票,只是因为另一个答案没有明确说明这里的这一步已经可以解决它,而是在之后提到了一个在我的案例中没有出现的错误。
        【解决方案14】:

        对于初学者,您可能还想确保您是running your script in the console,而不是普通的 Python 代码。 highlight a piece of code and run it 相当容易。

        【讨论】:

          【解决方案15】:

          我的环境:macOS 和 anaconda3

          这对我有用:

          matplotlib.use('macosx')
          

          或交互模式:

          matplotlib.use('TkAgg')
          

          【讨论】:

          • 在导入 matplotlib.pyplot 之前添加这个
          • 要使用 TkAgg,您还需要安装 tkinter。
          【解决方案16】:

          来自 DanT 的评论为我解决了这个问题,matplotlib 与 pycharm 在 Linux 上与 GTKagg 后端。导入 matplotlib 后会出现以下错误:

          >>> import matplotlib as mpl
          
          Backend GTKAgg is interactive backend. Turning interactive mode on.
          Failed to enable GUI event loop integration for 'gtk'
          

          当绘制类似这样的东西时:

          from matplotlib import pyplot as plt
          plt.figure()
          plt.plot(1,2)
          plt.show()
          

          会弹出一个图形屏幕,但没有图表出现。 使用:

          plt.show(block=True)
          

          正确显示图形。

          【讨论】:

            【解决方案17】:

            就我而言,我想做以下事情:

                plt.bar(range(len(predictors)), scores)
                plt.xticks(range(len(predictors)), predictors, rotation='vertical')
                plt.show()
            

            在这里混合解决方案后,我的解决方案是在此之前添加以下命令:

                matplotlib.get_backend()
                plt.interactive(False)
                plt.figure()
            

            使用以下两个导入

               import matplotlib
               import matplotlib.pyplot as plt
            

            在我的情况下,似乎所有命令都是必需的,使用带有 ElCapitan 和 PyCharm 2016.2.3 的 MBP。问候!

            【讨论】:

              【解决方案18】:

              在非交互式环境中,我们必须使用 plt.show(block=True)

              【讨论】:

                【解决方案19】:

                对于那些在 IDE 中运行脚本(而不是在 Python 控制台或笔记本等交互式环境中工作)的人,我发现这是最直观和最简单的解决方案:

                plt.imshow(img)
                plt.waitforbuttonpress()
                

                它显示图形并等待用户点击新窗口。只有这样它才能恢复脚本并运行其余代码。

                【讨论】:

                  【解决方案20】:

                  我能够将此处的其他一些建议组合在一起,但仅在将plt.interactive(False) 切换到True 并再次返回时。

                  plt.interactive(True)
                  plt.pyplot.show()
                  

                  这将闪现我的情节。然后设置为False 允许查看。

                  plt.interactive(False)
                  plt.pyplot.show()
                  

                  如前所述,我的程序在关闭所有窗口之前不会退出。以下是我当前运行环境的一些详细信息:

                  Python version 2.7.6
                  Anaconda 1.9.2 (x86_64)
                  (default, Jan 10 2014, 11:23:15) 
                  [GCC 4.0.1 (Apple Inc. build 5493)]
                  Pandas version: 0.13.1
                  

                  【讨论】:

                    【解决方案21】:

                    pycharm需要设置一个属性。

                    import matplotlib.pyplot as plt
                    
                    plt.interactive(False)  #need to set to False
                    
                    dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
                    
                    plt.show()
                    

                    【讨论】:

                      【解决方案22】:

                      将导入更改为:

                      import matplotlib.pyplot as plt
                      

                      或使用这一行:

                      plt.pyplot.show()
                      

                      【讨论】:

                        【解决方案23】:

                        我使用的是 Ubuntu,我按照上面的@Arie 所说的进行了尝试,但仅在终端中使用了这一行:

                        sudo apt-get install tcl-dev tk-dev python-tk python3-tk
                        

                        它成功了!

                        【讨论】:

                          【解决方案24】:

                          在 Pycharm 中,有时 Matplotlib.plot 不会出现。

                          因此,在调用plt.show() 后,请检查右侧工具栏中的 SciView。在 SciView 中,每个生成的图都将被存储。

                          【讨论】:

                            【解决方案25】:

                            我在尝试绘制直方图时遇到了上述错误,而以下点对我有用。

                            操作系统:Mac Catalina 10.15.5

                            Pycharm 版本:社区版 2019.2.3

                            Python 版本:3.7

                            1. 我将导入语句更改如下(从 - 到)

                            来自:

                            import matplotlib.pylab as plt

                            到:

                            import matplotlib.pyplot as plt

                            1. 并将绘图语句更改为下面(将我的命令形式 pyplot 更改为 plt)

                            来自:

                            plt.pyplot.hist(df["horsepower"])
                            
                            # set x/y labels and plot title
                            plt.pyplot.xlabel("horsepower")
                            plt.pyplot.ylabel("count")
                            plt.pyplot.title("horsepower bins") 
                            
                            

                            到:

                            plt.hist(df["horsepower"])
                            
                            # set x/y labels and plot title
                            plt.xlabel("horsepower")
                            plt.ylabel("count")
                            plt.title("horsepower bins")
                            
                            1. 使用 plt.show 显示直方图

                            plt.show()

                            【讨论】:

                              猜你喜欢
                              • 2019-08-31
                              • 2016-03-24
                              • 2020-08-20
                              • 1970-01-01
                              • 2021-08-12
                              • 2023-03-03
                              • 1970-01-01
                              • 2016-06-25
                              • 1970-01-01
                              相关资源
                              最近更新 更多