Ответ 1
Просто используйте
plt.show()
Это делает трюк, но я не знаю почему.
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 как интерпретатор с одинаковыми результатами.
Это мой 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)]'}
Просто используйте
plt.show()
Это делает трюк, но я не знаю почему.
Я понимаю, что это старо, но я решила, что проясню заблуждение для других путешественников. Если для параметра 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.isinteractive()
имеет значение True. Установка для меня "False" помогла мне.
plt.interactive(False)
Я пробовал разные решения, но для меня окончательно работал plt.show(block=True)
. Вам нужно добавить эту команду после команды myDataFrame.plot()
, чтобы она вступила в силу. Если у вас есть несколько сюжетов, просто добавьте команду в конец вашего кода. Это позволит вам видеть все данные, которые вы рисуете.
import matplotlib
matplotlib.use('TkAgg')
Работает для меня. (PyCharm/OSX)
Я нашел решение. Это сработало для меня:
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()
Я тестирую в своей версии Pycharm (Community Edition 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)
Вскоре после вызова
plt.imshow()
Вызов
plt.show(block = True)
Вы получите всплывающее окно matplotlib с изображением.
Это блокирующий способ. Дальше script не будет работать, пока поп не будет закрыт.
Со мной проблема заключалась в том, что matplotlib использовал неправильный бэкэнд. Я использую Debian Jessie.
В консоли я сделал следующее:
import matplotlib
matplotlib.get_backend()
В результате получилось: "agg", в то время как это должно быть "TkAgg".
Решение было простым:
Просто добавьте plt.pyplot.show()
, это будет хорошо.
Лучшее решение - отключение SciView.
Я тестировал в своей версии на 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)
Мой env: macOS & anaconda3
Это работает для меня:
matplotlib.use('macosx')
или интерактивный режим:
matplotlib.use('TkAgg')
Я смог получить комбинацию некоторых других предложений, работающих здесь для меня, но только при переключении 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
Комментарий от 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)
отображает графику правильно.
В моем случае я хотел сделать следующее:
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
Кажется, что все команды необходимы в моем случае, с MBP с ElCapitan и PyCharm 2016.2.3. Привет!
Для новичков вы также можете убедиться, что вы запускаете script в консоли, а не как обычный код Python, Довольно легко выделить фрагмент кода и запустить его.
В неинтерактивном окружении мы должны использовать plt.show(block = True)
Ничто из вышеперечисленного не сработало для меня, но следующее сработало:
settings > Tools > Python Scientific
Pycharm settings > Tools > Python Scientific
. Я получил ошибку. No PyQt5 module found
. PyQt5
установку PyQt5
используя:
sudo apt-get install python3-pyqt5
Одно свойство нужно установить для 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()
plt.show()
в конце концов работает.
Изменить импорт на:
import matplotlib.pyplot as plt
или используйте эту строку:
plt.pyplot.show()
Для тех, кто запускает сценарий в среде IDE (и не работает в интерактивной среде, такой как консоль Python или ноутбук), я обнаружил, что это наиболее интуитивное и простое решение:
plt.imshow(img)
plt.waitforbuttonpress()
Он показывает рисунок и ждет, пока пользователь не нажмет на новое окно. Только тогда он возобновляет работу сценария и запускает остальную часть кода.
Я использую Ubuntu, и я попытался, как сказал @Arie выше, но с этой строкой только в терминале:
sudo apt-get install tcl-dev tk-dev python-tk python3-tk
И это сработало!
В Pycharm время от времени Matplotlib.plot не будет отображаться.
Поэтому после вызова plt.show()
проверьте на правой боковой панели инструментов SciView. Внутри SciView все сгенерированные графики будут сохранены.