to post messages and comments.

Всё, что раздражало меня в gnuplot, кажется, устранено в matplotlib, хотя matplotlib на gnuplot и похожа.
Мне в matplotplib нравится, что всё сделано единообразно, что нету множество частных случаев, в каждом из которых одинаковые действия выполняются по-разному.
Вместо довольно убогенького язычка в matplotlib полноценный python. При этом ipython -pylab позволяет работать интерактивно.

Не вижу вообще ни единой причины использовать gnuplot вместо matplotlib.
Вот даже себя почти уговорил бросить каку и взяться за matplotlib.

Как бороться с этой лабудой?
This probably reflects a bug in the program.
The error was 'BadMatch (invalid parameter attributes)'.
(Details: serial 955 error_code 8 request_code 73 minor_code 0)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)

Поставил и запустил свой spectractor на винде. Завелось на python-2.6 без проблем, класс! Надо посмотреть, как там с более поздними версиями у scipy.
Пора делать страничку spectractor.sourceforge.net и класть туда архив, пока там все еще git-репа. Перфекционизм и необходимость работать сильно тормозят процесс.

Нет, ну какая красота все-таки матплотлиб! Добавление интерактивности в скрипты заняло несколько минут. Ставим точки мышкой на графике, после n-го клика окно с графиком закрывается: класс с методом __call__ в несколько строчек.
Конечно, во внутренней реализации либы не все красиво, но может к 1.0 зарефакторят.

Ну что ж, я натестировался вволю, пора подводить итоги и писать заметку =) Создание графиков на лету, без сохранения на диск и их выдача сервером может быть реализована с помощью PIL или метода canvas.print_png. Оба варианта работают с использованием библиотек, написанных на Си; если я правильно понял, это _imaging.so и _png.so. Различия во времени исполнения заметны: это до 10 сек для 100 прогонов. Различия обусловлены, похоже, только реализацией matplotlib: чем быстрее у него "отнять" данные графика, тем быстрее будет.

Еще одна вариация того способа, которым я в Джанго делаю картинки на лету: wiki.pylonshq.com
Тут те же самые canvas.tostring_rgb() и PIL.Image.fromstring(), но чуть иная система работы с канвасом бекэнда Agg. Почему никому (судя по выдаче гугла) не приходила идея не делать тустринг, фромстринг, а сразу матплотлибом сохранить картинку? Это работает (и результат мне нравится больше), но почему возникает потеря производительности?

Чем дальше в лес, тем больше грибов. В процессе оптимизации функций создания картинок без сохранения на диск (это чтобы сервер их сразу отдавал по запросу) выяснилось, что конвеер canvas.tostring_rgb() -> PIL.Image.fromstring() -> Image.save(StringIO, format='PNG') быстрее, чем сохранение картинки матплотлибовским канвасом напрямую: fig.savefig(StringIO).
Причем что в pure python, что в cython. Разница на 120 прогонах: 27 против 37 секунд.