Найти - Пользователи
Полная версия: Анимированное рисование в pylab
Начало » Python для новичков » Анимированное рисование в pylab
1
Обедающий философ
Здравствуйте!

Нашёл пример анимации диффузии http://www.timteatro.net/2010/10/29/performance-python-solving-the-2d-diffusion-equation-with-numpy/ (последний большой блок кода) . Он всем хорош, кроме одного - когда рисование заканчивается, ничего нельзя сделать из командной строки, не закрыв сначала график, а после закрытия графика у меня не получилось снова вернуть его к жизни. А хотелось бы, чтобы можно было, скажем, изменить параметры и снова запустить. Так, как сделано здесь http://jenyay.net/Matplotlib/Ion - удовлетворяет этому требованию, но работает в десятки раз медленнее. Также хотелось бы, чтобы можно было штатно приостановить симуляцию по сигналу с клавиатуры, то бишь чтобы можно было ввести несколько команд и продолжить её заново (насколько я понял, оба приведённых примера этого не могут).

Как мне добиться желаемого?

Заранее благодарен.
asv13
Если хотите действительно интерактивных и быстрых графиков, с удобными элементами управления - советую уйти от matplotlib к chaco. Matplotlib хорош для статики (да и вобще тормоз).
Обедающий философ
Спасибо, посмотрю.

А по поводу паузы по команде пользователя не подскажете? Желательно кроссплатформенное решение.

Ещё вспомнилось - хотелось бы одновременно рисовать два графика - собственно моделируемую систему и график зависимости нескольких величин от времени. Такого тоже пока что в примерах не встречал.
asv13
Ставите ETS отсюда
http://pythonxy.googlecode.com/files/EnthoughtToolSuite-3.6.0_py26.exe

Здесь будут примеры c:\Python26\Doc\EnthoughtToolSuite\Chaco\examples\demo.py

Обедающий философ
Ещё вспомнилось - хотелось бы одновременно рисовать два графика - собственно моделируемую систему и график зависимости нескольких величин от времени. Такого тоже пока что в примерах не встречал.
да хоть десять графиков.. в моих программах как правило больше 2х отображается. Причем добавляю-убираю графики в скрипте “на ходу” от выделения строк в таблице.

В chaco есть контейнер ArrayPlotData, в котором если данные обновляются - то за перерисовкой графиков, которые используют эти данные, следить уже не надо, все происходит автоматом.
Обедающий философ
Читаю официальный вроде как туториал. http://github.enthought.com/chaco/user_manual/tutorial_1.html Первый пример прошёл на ура. Ввожу второй приведённый там пример

from traits.api import HasTraits, Instance
from traitsui.api import View, Item
from chaco.api import Plot, ArrayPlotData
from enable.component_editor import ComponentEditor
from numpy import linspace, sin

class LinePlot(HasTraits):
plot = Instance(Plot)
traits_view = View(
Item('plot',editor=ComponentEditor(), show_label=False),
width=500, height=500, resizable=True, title="Chaco Plot")

def __init__(self):
super(LinePlot, self).__init__()
x = linspace(-14, 14, 100)
y = sin(x) * x**3
plotdata = ArrayPlotData(x=x, y=y)
plot = Plot(plotdata)
plot.plot(("x", "y"), type="line", color="blue")
plot.title = "sin(x) * x^3"
self.plot = plot

if __name__ == "__main__":
LinePlot().configure_traits()
и оказывается, что нет никаких traits.api, traitsui.api, View, Item, chaco.api, enable.component_editor, сеанс же поиска в интернете показал, что есть enthought.traits.api, enthought.traits.ui, view, item, enthought.chaco.api, enthought.enable.api. Причём, судя по всему, второй список вовсе не служит адекватной заменой первому, ибо после оной замены питон мне нарисовал, что

TypeError                                 Traceback (most recent call last)

/media/3f16c67b-5e31-48bf-85c2-65bfd35e49f3/250gb/dima/alife/python/chaco_example.py in <module>()
22 from numpy import linspace, sin
23
---> 24 class LinePlot(HasTraits):
25 plot = Instance(Plot)
26 traits_view = view(

/media/3f16c67b-5e31-48bf-85c2-65bfd35e49f3/250gb/dima/alife/python/chaco_example.py in LinePlot()
25 plot = Instance(Plot)
26 traits_view = view(
---> 27 item('plot',editor=ComponentEditor(), show_label=False),
28 width=500, height=500, resizable=True, title="Chaco Plot")
29

TypeError: 'module' object is not callable
. Что я делаю не так? Система ubuntu 11.04.
Обедающий философ
Ценой титанических усилий было установлено, что примеры находятся в /usr/share/doc/python-chaco/examples, а примеры из настоящего туториала находятся в /usr/share/doc/python-chaco/examples/tutorials/scipy2008. И они действительно претерпели изменения. Вопщем, пока что продолжаю борьбу.
asv13
Я то под виндой весь ETS скопом ставлю - вместе с traits и т.п. Потому проблем нет, всё работает. Не знаю как оно там в убунту, я в него редко заглядываю…
Обедающий философ
Ну я так понял, что там всё было установлено, просто за три года иерархия модулей несколько поменялась. В тех примерах, что идут с пакетом, всё вроде правильно.
Обедающий философ
Таки сподобился изучить туториал. Усвоил, как делать по несколько графиков, но не нашёл, как можно рассчитывать какой-то длительный процесс и в реальном времени выводить его на график. И как его прерывать, чтобы можно было вводить команды в командной строке и снова возобновлять. И в примерах http://github.enthought.com/chaco/user_manual/annotated_examples.html#examples тоже такого не нашёл.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB