Pycharm не показывает сюжет


100

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)]'}

6
делает plt.pyplot.show()работу?
Padraic Cunningham

1
Это не. При запуске именно plt.pyplot.show () это не работает. Должен ли я написать что-то другое вместо pyplot? (здесь нуб).
Rasmus Larsen

что происходит, когда вы запускаете код в pycharm?
Padraic Cunningham

Когда я запускаю файл, происходит то же самое: окно быстро появляется и исчезает, печать с консоли: процесс завершен с кодом выхода 0. Когда я отправляю его на консоль, окно появляется и остается, но в окне ничего не отображается, оно просто белое. Обозначение окна: «Рисунок 1 (не отвечает)»
Расмус Ларсен

Вы должны добавить matplotlib.pyplot к visulize it.Refer: stackoverflow.com/a/29042575/4989929
Ронак Пория

Ответы:


103

Просто используйте

plt.show()

Эта команда указывает системе нарисовать график в Pycharm.

Пример:

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

4
Это действительно потрясающе - у меня это сработало, а у других ничего не вышло. Что было удивительно, мне не понадобился plt.show () в Jupyter Notebook, не знаю, почему поведение отличается в PyCharm
Ambareesh

тоже самое. Мне это не понадобилось в Jupyter Notebook
Pooria

Я тоже всегда забываю называть это. Это говорит системе, что нужно нарисовать его в pycharm. По умолчанию Notebook будет автоматически вызывать функции рисования и печати. Я думаю, это было сделано для более быстрого прототипирования.
MNM

Что делать, если мне нужно использовать, plt.draw()поскольку я обновляю цифру позже? plt.show()работает нормально, но plt.draw()ничего не показывает в PyCharm.
CGFoX

1
Может быть, вам это не нужно в записных книжках, потому что вы сделали что-то подобное %matplotlib inline. @CGFox, draw предназначается для явного рендеринга в память, но не для отображения на экране (или в файл). Вам нужно либо plt.pause (0.1), чтобы отобразить графики, либо вызвать plt.show (pause = True) в какой-либо другой точке кода, чтобы заставить их отобразить
xaviersjs

54

Я понимаю, что это старый, но я решил развеять заблуждение для других путешественников. Установка 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.


14
Добавление plt.show (block = True) в конец моей функции - вот что сработало для меня. Спасибо за разъяснение. (Python 3.x, PyCharm 2016.1.4, Ubuntu)
SummerEla

Вот что у меня работает (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 () "
Taka

34

У меня такая же проблема. Проверьте, верно ли plt.isinteractive(). Мне помогла установка значения «Ложь».

plt.interactive(False)

9
Вызов plt.show (block = True) помог мне один раз показать диаграмму. Но консоль блокировалась даже после закрытия окна графиков.
DanT

plt.interactive (False) сделал это для меня в PyCharm
фантастическая

У меня больше не установлен Python, поэтому я не знаю, сработает ли он для меня, но, поскольку он работает для других, я приму этот ответ (надеюсь, что это правильно в соответствии с правилами stackoverflow)
Расмус Ларсен

8
Правильное решение - установить plt.show (block = True), как предложил @charlie ниже. После добавления этой строки значение флага plt.interactive () не влияет на отображаемый график.
обморожение

Это не сработало для меня `для cluster_id в диапазоне (len (tempx [0])): plt.plot (tempx, tempy, 'rx--', markersize = 8) plt.legend (loc = 4, framealpha = 0.5) plt.interactive (False) plt.show (block = True) `
Мона Джалал

29

Я пробовал разные решения, но в итоге у меня сработало plt.show(block=True). Вам необходимо добавить эту команду после myDataFrame.plot()команды, чтобы это вступило в силу. Если у вас несколько сюжетов, просто добавьте команду в конец кода. Это позволит вам увидеть все данные, которые вы строите.


2
Это сделало это для меня. Должен быть принятый ответ. Мессинг с plt.interactive () не сделал ничего
обморожение

Я согласен, потому что это мне тоже помогло. Установка интерактивного режима на False и добавление DISPLAY = TRUE к переменным среды не помогли.
Fábio,

22
import matplotlib
matplotlib.use('TkAgg')

Работает для меня. (PyCharm / OSX)


Это также сработало для меня в Windows 10, когда plt.show()больше не помогло в более новой версии PyCharm (2020.1).
Корби

14

Я тестирую свою версию 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)

жаль это слышать. Я считаю, что это также работает в Pycharm 2017.3 (версия сообщества). Не могли бы вы попробовать использовать новую версию Pycharm?
tairen

Привет, Сария, извините за это. Я тестирую его в своем Pycharm 2018.1.2 (версия сообщества) с ОС Ubuntu. Это тоже работает.
Tairen 07

Привет, это работает для Pycharm 2019.3 с MacOs Catalina
Милад нуризаде

13

Я нашел решение. Это сработало для меня:

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()

Но теперь я столкнулся с новой проблемой. Как только график создается в новом окне, новый код, который я добавил после графика, не запускается, пока я не закрою только что открытое окно.
Dhruv

2
Важная строка, которой не хватало в вопросе, это plt.show ()
Йоав

6

Вскоре после звонка

plt.imshow() 

вызов

plt.show(block = True)

Вы получите всплывающее окно matplotlib с изображением.

Это путь блокировки. Дальнейший скрипт не запустится, пока поп не закроется.


Это то, что я искал.
NelsonGon

5

У меня проблема заключалась в том, что matplotlib использовал неправильный бэкэнд. Я использую Debian Jessie.

В консоли я сделал следующее:

import matplotlib
matplotlib.get_backend()

Результат был: «agg», тогда как это должно быть «TkAgg».

Решение было простым:

  1. Удалите matplotlib через pip
  2. Установите соответствующие библиотеки: sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. Снова установите matplotlib через pip.

5

Просто добавь plt.pyplot.show(), это было бы хорошо.

Лучшее решение - отключить SciView.


4

В своей версии тестировал на PyCharm 2017.1.2. Я использовал интерактивные (True) и 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)

4

Ничего из вышеперечисленного не помогло мне, но следующее:

  1. Снимите флажок (Показать графики в окне инструментов) в pycharm settings > Tools > Python Scientific.

  2. Я получил ошибку No PyQt5 module found. Пошли вперед с установкой, PyQt5используя:

    sudo apt-get install python3-pyqt5

Помните, что для некоторых достаточно только первого шага, и он работает.


1
Пожалуйста, поясните, что первым шагом может быть решение, поскольку оно сработало для меня. Сказано так, другой повторяющийся ответ @ amir1122 имеет право на существование. Что, конечно, тоже нормально, и вы все равно получили мой голос.
Лоренц,

1
@ Лоренц. Обновлено в соответствии с вашим предложением, которое имеет смысл.
Абдул Рехман Лиакат,

Шаг 1 работает, но кажется временным решением. Я подозреваю, что в моем случае это связано с тем, что у меня есть несколько версий Python (3.6, 3.7 и 3.8).
Джозайя Йодер,

2

Мой env: macOS и anaconda3

Это работает для меня:

matplotlib.use('macosx')

или интерактивный режим:

matplotlib.use('TkAgg')

Добавьте это перед импортом matplotlib.pyplot
Зои Л.

2

у меня была эта проблема, и я мог ее решить, вы можете протестировать мой способ .. отключите «показывать графики в окне инструментов» в настройке -> инструменты -> научный Python


1
Этот ответ уже был предоставлен два года назад (например, в stackoverflow.com/a/52221178/466862 ). Отвечая на старые вопросы, убедитесь, что вы отвечаете либо на новое, другое решение, либо на значительно лучшее объяснение.
Марк Роттевил,

Это повторяет ответ @ AbdulRehmanLiaqat, но он, по крайней мере, четко заявляет, что это может быть возможным решением. Я сначала отклонил это из-за повторения. Теперь я проголосовал за, просто потому, что в другом ответе четко не указано, что этот единственный шаг здесь уже может его решить, вместо этого он упоминает впоследствии ошибку, которой не было в моем случае.
Лоренц,

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)

отображает графику правильно.


1

В моем случае я хотел сделать следующее:

    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. Приветствую!



1

В неинтерактивном env мы должны использовать plt.show (block = True)


1

Для тех, кто запускает скрипт внутри IDE (и не работает в интерактивной среде, такой как консоль python или ноутбук), я считаю это наиболее интуитивно понятным и простым решением:

plt.imshow(img)
plt.waitforbuttonpress()

Он показывает цифру и ждет, пока пользователь не щелкнет в новом окне. Только после этого он возобновляет выполнение сценария и запускает остальной код.


1

Я был в состоянии получить комбинацию некоторых других предложений здесь работает для меня, но только тогда , переключая 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

0

Для 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()

0

Измените импорт на:

import matplotlib.pyplot as plt

или используйте эту строку:

plt.pyplot.show()

0

Я использую Ubuntu, и я пробовал, как сказал @Arie выше, но с этой строкой только в терминале:

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

И это сработало!


0

В Pycharm иногда не отображается Matplotlib.plot.

Итак, после вызова plt.show()проверки на правой панели инструментов SciView. Внутри SciView будут храниться все сгенерированные графики.


0

Я столкнулся с ошибкой выше, когда пытался построить гистограмму, и у меня работали точки ниже.

ОС: 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()

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.