Линукс, Vim, LaTeX, полезные скрипты, визуализация данных, численные расчёты, немного ФП

20090403

Русские буквы в matplotlib/pylab

Усилиями некого Алексея сегодня мы все наконец узнали как в Matplotlib/Pylab делать подписи по-русски. Вот работающий пример:
#!/usr/bin/env pytnon
# vim: set fileencoding=utf-8 ts=4 sw=4 expandtab:

# Cyrillic letters in Matplotlib,
# thanks to Alexey for solution, see http://koldunov.net/?p=290#comments
from matplotlib import rc
rc('font',**{'family':'serif'})
rc('text', usetex=True)
rc('text.latex',unicode=True)
rc('text.latex',preamble='\usepackage[utf8]{inputenc}')
rc('text.latex',preamble='\usepackage[russian]{babel}')

from pylab import *

def figsize(wcm,hcm): figure(figsize=(wcm/2.54,hcm/2.54))
figsize(13,9)

x = linspace(0,2*pi,100)
y = sin(x)
plot(x,y,'-')
xlabel(u"ось абсцисс")
ylabel(u"ось ординат")
title(u"Две беды в России — синусы и косинусы!")
savefig('rus-mpl.pdf')
И вот результат:



По теме:
Matplotlib. Простые вещи — 1
Matplotlib. Простые вещи — 2
Как построить график с изолиниями в gnuplot, gri и pylab
Короткие «рецепты» по применению Python в околонаучных целях

PS. Как, кстати, лучше PDF в растр конвертировать? Я делаю так:
$ pdftoppm -r 300 image.pdf | convert ppm:- image.png

5 коммент.:

  1. А почему не просто convert?
    convert image.pdf image.png

    ОтветитьУдалить
  2. А мне кажется, что просто convert хуже шрифты отрисовывает. А может у меня просто что-то с ImageMagick не то :(

    ОтветитьУдалить
  3. У меня почему-то при использовании usetex=True возникает проблема с сохранением файла. А именно, просмотр работает, а сохранить в векторный формат не удается. В случае pdf вываливается ошибка larm1440, а случае eps вот такая:
    ps2pdf was not able to process your image.
    \Here is the report generated by ghostscript:

    Error: /undefined in --get--
    Operand stack:
    --nostringval-- --dict:9/18(ro)(L)-- 112 --dict:16/16(L)-- --dict:16/16(L)-- base
    Execution stack:
    %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1905 1 3 %oparray_pop 1904 1 3 %oparray_pop 1888 1 3 %oparray_pop 1771 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- %finish_stringwidth --nostringval-- --nostringval-- 14 8 0 --nostringval-- (pdf_text_enum_t) %op_show_continue --nostringval--
    Dictionary stack:
    --dict:1156/1684(ro)(G)-- --dict:1/20(G)-- --dict:96/200(L)-- --dict:5/6(ro)(L)-- --dict:182/300(L)-- --dict:44/200(L)-- --dict:8/17(L)-- --dict:51/90(L)--
    Current allocation mode is local
    Last OS error: 2
    Current file position is 68539

    Куда копать, не подскажете?

    ОтветитьУдалить
  4. ghostscript:
    gs -dBATCH -dNOPAUSE -sDEVICE=pngwrite -r600 \
    -sOUTPUTFILE=output.png input.pdf

    где -rxxx - разрешение выходного файла.

    если подать на вход многостраничный pdf и задать
    -sOUTPUTFILE=output%03d.png
    то на выходе получатся output001.png...output100.png
    форматирование согласно спецификации C printf.

    можно задавать разные устройства вывода, для jpeg, tiff
    подробности см документацию по ghostscript

    http://pages.cs.wisc.edu/~ghost/doc/svn/Devices.htm
    http://pages.cs.wisc.edu/~ghost/doc/svn/Use.htm

    ОтветитьУдалить
  5.  Опечатка в первой строке, должно быть python вместо pytnon, а лучше python2

    ОтветитьУдалить