可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Pycharm does not show plot from the following code:
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()
What happens is that a window appears for less than a second, and then disappears again.
Using the Pyzo IEP IDE (using same interpreter) on the same code the plot shows as expected.
...So the problem must be with some setting on Pycharm.
I've tried using both python.exe and pythonw.exe as interpreter both with same results.
This is my sys_info:
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)]'}
回答1:
Just use
plt.show()
It does the trick, but I don't know why.
回答2:
I realize this is old but I figured I'd clear up a misconception for other travelers. Setting plt.pyplot.isinteractive()
to False
means that the plot will on be drawn on specific commands to draw (i.e. plt.pyplot.show()
). Setting plt.pyplot.isinteractive()
to True
means that every pyplot
(plt
) command will trigger a draw command (i.e. plt.pyplot.show()
). So what you were more than likely looking for is plt.pyplot.show()
at the end of your program to display the graph.
As a side note you can shorten these statements a bit by using the following import command import matplotlib.pyplot as plt
rather than matplotlib as plt
.
回答3:
I had the same problem. Check wether plt.isinteractive()
is True. Setting it to 'False' helped for me.
plt.interactive(False)
回答4:
I tried different solutions but what finally worked for me was plt.show(block=True)
. You need to add this command after the myDataFrame.plot()
command for this to take effect. If you have multiple plot just add the command at the end of your code. It will allow you to see every data you are plotting.
回答5:
import matplotlib
matplotlib.use('TkAgg')
Works for me. (PyCharm/OSX)
回答6:
I have found a solution. This worked for me:
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()
回答7:
I test in my version of Pycharm (Community Edition 2017.2.2), you may need to announce both plt.interactive(False) and plt.show(block=True) as following:
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)
回答8:
Soon after calling
plt.imshow()
call
plt.show(block = True)
You will get the matplotlib popup with the image.
This is a blocking way. Further script will not run until the pop is closed.
回答9:
With me the problem was the fact that matplotlib was using the wrong backend. I am using Debian Jessie.
In a console I did the following:
import matplotlib
matplotlib.get_backend()
The result was: 'agg', while this should be 'TkAgg'.
The solution was simple:
- Uninstall matplotlib via pip
- Install the appropriate libraries: sudo apt-get install tcl-dev tk-dev python-tk python3-tk
- Install matplotlib via pip again.
回答10:
Just add plt.pyplot.show()
, that would be fine.
The best solution is disabling SciView.
回答11:
I tested in my version on PyCharm 2017.1.2. I used interactive (True) and show (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)
回答12:
My env: macOS & anaconda3
This works for me:
matplotlib.use('macosx')
or interactive mode:
matplotlib.use('TkAgg')
回答13:
None of the above worked for me but the following did:
- Disable the checkbox (Show plots in tool window) in pycharm
settings > Tools > Python Scientific
.
I received the error No PyQt5 module found
. Went ahead with the installation of PyQt5
using :
sudo apt-get install python3-pyqt5
回答14:
Comment from DanT fixed this for me, matplotlib with pycharm on linux with the GTKagg backend. Upon importing matplotlib I would get the following error:
>>> import matplotlib as mpl
Backend GTKAgg is interactive backend. Turning interactive mode on.
Failed to enable GUI event loop integration for 'gtk'
When plotting something like so:
from matplotlib import pyplot as plt
plt.figure()
plt.plot(1,2)
plt.show()
A figure screen would pop up but no charts appear.
using:
plt.show(block=True)
displays the graphic correctly.
回答15:
In my case, I wanted to do the following:
plt.bar(range(len(predictors)), scores)
plt.xticks(range(len(predictors)), predictors, rotation='vertical')
plt.show()
Following a mix of the solutions here, my solution was to add before that the following commands:
matplotlib.get_backend()
plt.interactive(False)
plt.figure()
with the following two imports
import matplotlib
import matplotlib.pyplot as plt
It seems that all the commands are necessary in my case, with a MBP with ElCapitan and PyCharm 2016.2.3. Greetings!
回答16:
For beginners, you might also want to make sure you are running your script in the console, and not as regular Python code. It is fairly easy to highlight a piece of code and run it.
回答17:
In non-interactive env, we have to use plt.show(block=True)
回答18:
For those who are running a script inside an IDE (and not working in an interactive environment such as a python console or a notebook), I found this to be the most intuitive and the simplest solution:
plt.imshow(img)
plt.waitforbuttonpress()
It shows the figure and waits until the user clicks on the new window. Only then it resume the script and run the rest of the code.
回答19:
I was able to get a combination of some of the other suggestions here working for me, but only while toggling the plt.interactive(False)
to True
and back again.
plt.interactive(True)
plt.pyplot.show()
This will flash up the my plots. Then setting to False
allowed for viewing.
plt.interactive(False)
plt.pyplot.show()
As noted also my program would not exit until all the windows were closed. Here are some details on my current run environment:
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
回答20:
One property need to set for 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()
回答21:
Change import to:
import matplotlib.pyplot as plt
or use this line:
plt.pyplot.show()
回答22:
I'm using Ubuntu and I tried as @Arie said above but with this line only in terminal:
sudo apt-get install tcl-dev tk-dev python-tk python3-tk
And it worked!
回答23:
In Pycharm , at times the Matplotlib.plot won't show up.
So after calling plt.show()
check in the right side toolbar for SciView. Inside SciView every generated plots will be stored.