Як мені знову отримати інтерактивні графіки в Spyder / IPython / matplotlib?


91

Я перейшов з Python (x, y) 2.7.2.3 до 2.7.6.0 у Windows 7 (і був радий побачити, що я нарешті можу знову ввести function_name?та побачити документ у Інспекторі об'єктів), але тепер побудова графіків не працює як зараз звик.

Раніше (Spyder 2.1.9, IPython 0.10.2, matplotlib 1.2.1), коли, наприклад, я будував цей сценарій , він будував би графічні підпрограми поруч в інтерактивному вікні:

введіть тут опис зображення

Тепер (Spyder 2.2.5, IPython 1.2.0, Matplotlib 1.3.1), коли я намагаюся скласти графік, він робить підзаголовки як крихітні вбудовані PNG, що є зміною в IPython :

крихітні вбудовані PNG-файли

Тож я зайшов у варіанти і знайшов таке:

графічні параметри

це, здається, говорить про те, що я можу повернути старі інтерактивні сюжети, при цьому 4 підпрограми відображаються поруч, але коли я переключаюся на "Автоматичний" і намагаюся щось побудувати, це нічого не робить. Ніяких сюжетів взагалі.

Якщо я переключаю це випадаюче меню на Qt або знімаю прапорець біля пункту «Активувати підтримку», воно відображає лише перший підпрограмний фрагмент або його частину, а потім зупиняється:

введіть тут опис зображення

Як отримати стару поведінку 4-х пліч-о-пліч підпрограм на одній фігурі, з якою я можу взаємодіяти?


Я думаю, це повинно йти як звіт про помилку до pythonxy. Моє наївне припущення полягає в тому, що вони використовують pyplot, щоб обробляти всі там змови та отримувати укуси за це (що здається неправильним, оскільки вони мають власний віджет qt).
tacaswell

1
@tcaswell Хто такі "вони" і що вони використовують замість pyplot?
ендоліт

1
Чи можете ви відтворити цю проблему поза pythonxy (просто використовуючи прямий ipython + qtconsole)? Тут недостатньо інформації, щоб розібратися, що йде не так.
tacaswell

1
Я гадаю, це помилка в Spyder (Spyder - це IDE, pythonxy - це розподіл).
Thomas K

1
@tcaswell: Ага. Здається, мій скрипт видає помилки matplotlib, які потім надсилаються кудись, крім консолі IPython. Вони з’являються, якщо я замість цього використовую консоль Qt, і тепер, коли я її шукаю, вони з’являються на звичайній вкладці консолі Spyder. Якщо я роблю більш простий скрипт, він працює, незалежно від стану машини чи об’єктно-орієнтованого. Я припустив, що мені довелося змінити деякі налаштування IPython через нові вбудовані графіки.
ендоліт

Відповіді:


134

Змініть серверну систему на автоматичну:

Інструменти> налаштування> Консоль IPython> Графіка> Графічний сервер> Баккенд: автоматичний

Потім закрийте і відкрийте Spyder.


27
Закриття та відкриття дійсно необхідно. Просто цікаво, чому це не значення за замовчуванням.
Mathias711

5
Крім того, для тих, хто все ще не бачить своїх сюжетів (як я не був), вікно сюжету може мовчки з'являтися_за_вікном вашого вікна консолі (принаймні, це відбувається в Spyder в Windows 10), тому вам, можливо, доведеться шукати своє вікно.
Джошуа Глейзер

3
Для тих, хто не може цього знайти, він знаходиться за адресоюpython > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
Камеронройтейлор

6
Замість перезапуску Spyder ви також можете просто перезапустити ядро ​​(або натиснувши коліщатко налаштувань на консолі, а потім "Перезапустити ядро") або за допомогою комбінації клавіш (на Mac Cmd +.)
Майкл

Я поняття не маю, чому, але перехід до автоматичного, перезапуск Spyder, а потім повернення до Inline призвели до того, що вбудовані графіки почали відображатися щоразу, коли я видаю команду введення в циклі. Це дуже корисно!
Джосія Йодер

50

Ви можете швидко керувати цим, набравши вбудовані магічні команди в консолі IPython Spyder, які я знаходжу швидше, ніж їх вибирати з меню налаштувань. Зміни вступають в силу негайно, без необхідності перезапускати Spyder або ядро.

Щоб перейти до "автоматичних" (тобто інтерактивних) графіків, введіть:

%matplotlib auto

тоді, якщо ви хочете повернутися до "вбудованого", введіть це:

%matplotlib inline

(Примітка: ці команди не працюють у консолях, що не належать до IPython)

Побачити більше довідкової теми: Призначення "% matplotlib inline"


У Python 3.6 я отримуюmatplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
Карло

2
@Karlo, що помилка очікується від звичайного інтерпретатора "python". Цей синтаксис дійсний лише для ipython або Spyder.
Mike T

Добре, я використовував його в Spyder, але в консолі Python. Дійсно, це працює в консолі IPython.
Карло

3
Чи є спосіб встановити його за допомогою сценарію? А саме вибрати, де виводиться графік у сценарії? Спасибі.
Рої,

1
Здається, це не працює у Spyder, хоча це спосіб зробити це у звичайному вікні IPython. Використання налаштувань меню мені працювало; не знаю, чому це не так.
Черепашки милі

10

Після застосування: Інструменти> налаштування> Графіка> Бекенд> Автоматично Просто перезапустіть ядро введіть тут опис зображення

І ви напевно отримаєте інтерактивний сюжет. Щасливого кодування!


5

Як зазначено в коментарях, проблема полягає у вашому сценарії. Насправді є 2 проблеми:

  • Існує помилка matplotlib, я думаю, ви передаєте аргумент як Noneдесь. Можливо, через дефолт?
  • Ви телефонуєте show()після кожного підзаговора. show()слід викликати один раз в кінці вашого сценарію. Альтернативою є використання інтерактивного режиму, який шукайте ionв документації matplotlib.

2

Це насправді досить легко виправити і не вимагає кодування:

1. Клацніть на вкладці Графіки над консоллю. 2. Потім у верхньому правому куті екрана графіків натисніть кнопку параметрів. 3.Нарешті зніміть прапорець біля кнопки "Вимкнути вбудований графік"

Тепер повторно запустіть свій сценарій, і ваші графіки повинні з’явитися в консолі.

Ура.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.