Піхарм не показує сюжету


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()роботу?
Падрайк Каннінгем,

1
Це не. При запуску точно 'plt.pyplot.show ()' це не працює. Чи слід писати щось інше замість "pyplot"? (нуб тут).
Расмус Ларсен

що відбувається, коли ви запускаєте код у pycharm?
Падрайк Каннінгем,

Коли я запускаю файл, відбувається те саме: вікно швидко з'являється і зникає, друк консолі: Процес закінчений із кодом виходу 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 () у блокноті Юпітера, невідомо, чому поведінка відрізняється у PyCharm
Ambareesh

те ж саме. Мені це не потрібно було в «Зошиті Юпітера»
Поорія

Я завжди забуваю також це зателефонувати. Це говорить системі насправді намалювати його в pycharm. За замовчуванням ноутбук автоматично викличе функції друку та друку. Я думаю, що це було зроблено так для швидшого створення прототипів.
МНМ

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

1
Можливо, вам це не потрібно в зошитах, бо ви робили щось подібне %matplotlib inline. @CGFox, малюнок призначений явно для відображення в пам’яті, але не для відображення на екрані (або файлі). Вам потрібно або plt.pause (0.1), щоб показати графіки, або зателефонувати plt.show (пауза = 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): "імпортувати matplotlib.pyplot як plt", потім графік функції з DataFrame, як у "corr_data [col] .plot (kind =" bar ", figsize = (8, 5), grid = True, color = "r", title = col) "і перед виходом з функції" plt.show () "
Така

34

У мене була та сама проблема. Перевірте, чи plt.isinteractive()є Істина. Мені допомогло встановлення значення "False".

plt.interactive(False)

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

plt.interactive (False) зробив це для мене в PyCharm
фантастично

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

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

Для мене це не спрацювало `для ідентифікатора кластера в діапазоні (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" до змінних середовища не допомогло.
Фабіо,

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

Привіт, це працює для Pycharm 2019.3 з MacOs Catalina
Milad nourizade

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

Але зараз я стикаюся з новою проблемою. Як тільки графік буде сформовано у новому вікні, новий код, який я додав після графіку, не запускається, доки я не закрию нещодавно відкрите вікно.
Друв,

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) та шоу (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
@Lorenz. Оновлено відповідно до вашої пропозиції, яка має сенс.
AbdulRehmanLiaqat

Крок 1 працює, але відчувається як обхідний шлях. У моєму випадку я підозрюю, що це тому, що у мене є кілька версій Python (3.6, 3.7 та 3.8), які плавають.
Джосія Йодер

2

Моя env: macOS & anaconda3

Це працює для мене:

matplotlib.use('macosx')

або інтерактивний режим:

matplotlib.use('TkAgg')

Додайте це перед імпортом matplotlib.pyplot
Zoe L

2

у мене була ця проблема, і я міг її вирішити, ви можете випробувати мене. відключіть параметр "показувати графіки у вікні інструменту" -> інструменти -> python науковий


1
Ця відповідь була надана два роки тому (наприклад, у stackoverflow.com/a/52221178/466862 ). Відповідаючи на старіші запитання, обов’язково відповідайте на нове, інше рішення, або на значно кращі пояснення.
Марк Роттевель,

Це повторює відповідь @ AbdulRehmanLiaqat, але принаймні чітко зазначає, що це може бути можливим рішенням. Я вперше проголосував за це через повторення. Тепер я проголосував, просто тому, що в іншій відповіді чітко не сказано, що цей єдиний крок тут вже може його вирішити, натомість він згадує про помилку, яка згодом не з’явилася у моєму випадку.
Лоренц

1

Коментар від DanT виправив це для мене, matplotlib with 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.