Как мне снова получить интерактивные графики в Spyder / IPython / matplotlib?

92

Я обновился с 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

Я изучил варианты и нашел следующее:

параметры графики

который, кажется, говорит о том, что я могу вернуть старые интерактивные сюжеты, с четырьмя второстепенными сюжетами, отображаемыми бок о бок, но когда я переключаюсь на «Автоматический» и пытаюсь что-то построить, он ничего не делает. Никаких сюжетов.

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

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

Как мне получить старое поведение четырех параллельных подзаголовков на одной фигуре, с которой я могу взаимодействовать?

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

Ответы:

136

Измените бэкэнд на автоматический:

Инструменты> настройки> Консоль IPython> Графика> Серверная часть графики> Бэкэнд: автоматически

Затем закройте и откройте Spyder.

Виктор Арельяно
источник
27
Закрытие и открытие действительно необходимо. Просто интересно, почему это не значение по умолчанию.
Mathias711,
5
Кроме того, для тех, кто все еще не видит свои графики (например, я не видел), окно графика может незаметно появляться_ позади_ вашего окна консоли (по крайней мере, в Spyder в Windows 10), поэтому вам, возможно, придется поискать свое окно.
Джошуа Глейзер
3
Для тех, кому не python > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
удается
6
Вместо перезапуска Spyder вы также можете просто перезапустить ядро ​​(либо щелкнув колесо настроек в консоли, а затем «Перезагрузить ядро», либо с помощью сочетания клавиш (на Mac Cmd +).
Майкл
Понятия не имею, почему, но переход на автоматический, перезапуск Spyder, а затем переход обратно на встроенный заставил встроенные графики начать отображаться всякий раз, когда я запускаю команду ввода в цикле. Это очень полезно!
Josiah Yoder
51

Вы можете быстро управлять этим, набирая встроенные магические команды в консоли 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.
Karlo
3
Есть ли способ установить его с помощью скрипта? А именно выбрать, где будет вывод графика в скрипте? Спасибо.
Royi
1
Похоже, что это не работает в Spyder, хотя это способ сделать это в обычном окне IPython. У меня сработало использование настроек меню; не уверен, почему это не так.
Turtles Are Cute
10

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

И вы обязательно получите интерактивный сюжет. Удачного кодирования!

Арчит Панди
источник
5

Как сказано в комментариях, проблема заключается в вашем скрипте. Собственно есть 2 проблемы:

  • Ошибка matplotlib, я думаю, вы передаете аргумент Noneгде-то. Может из-за дефолтодикта?
  • Вы звоните show()после каждого подсюжета. show()следует вызывать один раз в конце вашего скрипта. Альтернативой является использование интерактивного режима, ищите ionв документации matplotlib.
Ж. Мартино-Лагард
источник
2

На самом деле это довольно легко исправить и не требует программирования:

1. Щелкните вкладку «Графики» над консолью. 2. Затем в правом верхнем углу экрана графиков нажмите кнопку параметров. 3.Наконец снимите галочку с кнопки "Отключить встроенный график".

Теперь перезапустите ваш скрипт, и ваши графики должны появиться в консоли.

Ура.

Крис
источник