Интерактивен matplotlib чрез Eclipse PyDev

Това е продължение на тази тема интерактивен matplolib чрез eclipse, която е на около 2 години, аз се чудех дали е имало някакъв напредък междувременно.

Изпълнявам конзолата на IPython в прозорец на конзолата в Eclipse PyDev, но не мога да получа същите интерактивни функции за чертане с matplotlib, както ако стартирам IPython в команден ред (Windows) извън Eclipse PyDev. Ето как се сравняват двете:

A) Изпълнение на IPython в обвивка извън Eclipse PyDev

  1. Стартирайте IPython в командния ред на Windows с "ipython --pylab"
  2. В конзолата на IPython въведете "plot([1,2,3])". Това ще отвори прозорец за чертане на фигура и конзолата на IPython е готова за допълнителни команди (без да се налага да затваряте прозореца за чертане на фигура).
  3. Например, мога да въведа "xlabel('years')" и това ще актуализира моя прозорец за диаграма на фигурата.

B) Изпълнение на IPython в интерактивна конзола в рамките на Eclipse PyDev Въведете следното в интерактивната конзола на IPython в рамките на Eclipse PyDev:

  1. "от pylab import *"
  2. "plot([1,2,3])" --> прозорецът за графика на фигура не се показва.
  3. Трябва да въведа "show()", за да отворя прозореца за графика на фигурата. Но сега проблемът е, че докато държа отворен прозореца за графика на фигурата, конзолата на IPython не приема никакви нови команди.
  4. Така че затварям прозореца за графика на фигурата, въвеждам "xlabel('years')", последвано от "show()" отново. Това ще отвори отново прозореца за диаграма на фигурата с „години“ като етикет на моята ос, но самата диаграма е празна и вече не показва данните [1,2,3].

С това поведение A) очевидно превъзхожда B), но бих искал да продължа да работя в Eclipse PyDev, защото ми харесва винаги да имам списък с променливи на моя екран (без да се налага да изпълнявам команда за показване на всички променливи, както когато изпълнявам форма на IPython обвивка на Windows). Използването на Wicked Shell, както е предложено в другата тема, не работи (IPython не работи правилно в Wicked Shell).

Как мога да конфигурирам IPython в Eclipse PyDev, така че да показва същото интерактивно поведение, както ако го стартирам в командния ред на Windows?


person Michael    schedule 18.11.2012    source източник
comment
Опитайте да извикате ion() - това е функция от matplotlib, която означава "включен интерактивен режим".   -  person Thomas K    schedule 19.11.2012
comment
Благодаря ти Томас. Страхувам се, че ion() не го разрешава. Поне на моя компютър с Windows ion() води до цифри, които не реагират и трябва да бъдат прекратени с помощта на диспечера на задачите.   -  person Michael    schedule 21.11.2012


Отговори (4)


Можете да разрешите този проблем, като изберете GUI за интерактивната конзола в предпочитанията на PyDev.

Eclipse -> Прозорец -> Предпочитания -> Pydev -> Интерактивна конзола -> Активиране на интегрирането на GUI цикъл на събития.

В моя случай избрах PyQt (qt/qt4)

person Andy    schedule 13.05.2014

Извинения за потенциално непълния отговор, но се надявам, че ще мога да хвърля малко светлина върху проблема.

Вярвам, че това, което OP описва, е нормално поведение. Всъщност, започвайки от командния ред ipython, импортирането на pylab и издаването на команда plot произвежда точно описаното блокиращо поведение, така че това не е свързано с pydev или eclipse. Факт е, че шоуто в matplotlib блокира в интерактивен режим; когато използвате matplotlib в ipython сесия, стартирана като "ipython --pylab", вие се възползвате от някои "хакове", които разработчиците на ipython направиха за вас около matplotlib, позволявайки да имате както интерактивен режим, така и неблокиращи повиквания. Импортирането на pylab обаче не е достатъчно за прилагане на тези „хакове“. PyDev изглежда не позволява флагове към извикването на интерпретатора, така че не може директно да се извика "ipython --pylab".

За щастие ipython има специална команда "pylab", която прилага хаковете и импортира pylab, дори ако интерпретаторът не е стартиран с флага pylab. Така че можете просто да опитате да напишете „pylab“ вътре в конзолата (всъщност можете дори да персонализирате вашата pydev конзола, така че да се извършва автоматично) и трябва да получите желаното поведение. Въпреки това трябва да съобщя, че докато това работи добре за мен от ipython сесия, стартирана от командния ред, нещо се обърка, когато се опитам да направя същото от вътрешността на Eclipse. Командата не блокира, получавам иконата на python, но прозорецът на matplotlib не се показва. За протокола, аз съм на Mac, работещ със Snow Leopard. Не мога да разбера дали същият проблем се случва и в Windows, който OP изглежда използва.

person Spock    schedule 25.01.2013
comment
Актуализация: под Eclipse 4.4 под Ubuntu 14.04 64-битово въвеждане pylab прави напълно интерактивни и неблокиращи графики, както се очаква. - person Adam Ryczkowski; 12.08.2014

Постигам подобно поведение в Eclipse PyDev чрез изпълнение на чертаща функция в друга нишка:

import threading
from pylab import *
import matplotlib.animation as animation
import time

x = array(range(0,1000))/100
y = sin(x)

def updateData(self):
    ax.set_data(x,y)

def MyThread():
    global ax
    fig, axarr = subplots(1)
    ax, = axarr.plot(x,y)
    simulation = animation.FuncAnimation(fig, updateData)
    show()


t = threading.Thread(target=MyThread)
t.start()

# console stay active, user can interactively control figure
time.sleep(1)
y = sin(2*x)
time.sleep(2)
ax.get_axes().grid()
ax.get_axes().set_xlabel("time")

Тествано с инструментална верига Eclipse 4.3, PyDev 2.7.1, Python 3.2, IPython 0.13

person Liteon    schedule 29.03.2013
comment
За съжаление това не работи за мен. Получавам ValueError: сигналът работи само в основната нишка - person Zah; 29.03.2013
comment
По някаква причина редът import matplotlib.animation as animation убива моя IPython3 интерпретатор под Ubuntu 14.04 64bit Eclipse - person Adam Ryczkowski; 12.08.2014

Просто използвайте %matplotlibmagic-command, за да активирате интерактивното чертане (точно това, което описахте).

Командата pylab импортира numpy.* и pylab.*, замърсявайки сериозно вашето глобално пространство от имена.

person ankostis    schedule 16.02.2014