4/08/2008

Создание графиков в gnuplot метки, оси и подписи

Здесь будет говориться о том, как в gnuplot сделать подписи к осям с греческими буквами, как использовать в легендах надстрочное и подстрочное написание, как ставить стрелки на графиках и прочее.


Как использовать подстрочное / надстрочное написание?
Для этого следует ипользовать расширенный postscript-терминал, указав в скрипте построения графиков:
gnuplot> set terminal postscript enhanced
Надстрочные символы пишутся как X^2, подстрочные Y_3. Если необходимо написать так несколько символов, следует использвать фигурные скобки: Z_{64}. При одновременном надстрочном и подстрочном индексе используйте Z@^2_{64}.

Следующий пример поясняет использование различных вариантов написания, которые могут быть использованы в легенде для функций y=sin**2(x), y=sin**3(x), and y=sqrt(sin(x)).
gnuplot> set terminal postscript eps enhanced
gnuplot> set key spacing 1.3
gnuplot> set xrange [ 0 : pi ]
gnuplot> set yrange [ 0 : 1.5 ]
gnuplot> plot sin(x)**2 ti "sin^2(x)", \
sin(x)**3 ti "sin^3(x)",\
sqrt(sin(x)) ti "sin^{1/2}(x)"




Чтобы надписи не налезали друг на друга в легенде, требуется увеличить межстрочное расстояние. В данном примере оно увеличено на 30% при помощи команды set key spacing 1.3


Как использовать греческие буквы в текстах подписей?
Для этого следует ипользовать расширенный postscript-терминал, указав в скрипте построения графиков:
gnuplot> set terminal postscript enhanced
Греческие символы пишутся в виде {/Symbol a} - это, например, для буквы "альфа". Другие буквы можно найти в таблице:

Буква Символ Буква Символ Буква Символ Буква Символ
A Alpha N Nu a alpha n nu
B Beta O Omicron b beta o omicron
C Chi P Pi c chi p pi
D Delta Q Theta d delta q theta
E Epsilon R Rho e epsilon r rho
F Phi S Sigma f phi s sigma
G Gamma T Tau g gamma t tau
H Eta U Upsilon h eta u upsilon
I iota W Omega i iota w omega
K Kappa X Xi k kappa x xi
L Lambda Y Psi l lambda y psi
M Mu Z Zeta m mu z zeta

Так же можно использовать различные postscript-символы в их восьмеричном коде, например {/243} это символ фунта-стерлинга.
Следующий пример иллюстрирует построение линейной функции y=Alpha x+ Gamma при использовании двух греческих букв.

gnuplot> set terminal postscript eps enhanced
gnuplot> set xrange [ 0 : 5 ]
gnuplot> set label "{/Symbol a}=0.5, {/Symbol g}=0.2" at 2,0
gnuplot> plot 0.5*x-0.2 ti "y={/Symbol a}x-{/Symbol g}"






Как использовать в текстах подписей другие символы (проценты, копирайты)?
Выше уже говорилось о том, что можно использовать специальные postscript-символы, и это совсем не трудно. Для этого следует установить пакет gnuplot-doc и после этого обратиться к файлу ps_guide.ps - там перечислены все коды символов PostScript. Чтобы на одной из осей, к примеру, поставить знак процента в подписи, следует использовать команду:

gnuplot> set xlabel "Halftones, {/Symbol \\045} of grey"
То есть в подписи по оси X будет стоять: Halftones, 45% of grey


Как изменить расстояние между осями и подписью к ним?
Интервал можно изменить при помощи команд set {x|y}label
Например, это:

gnuplot> set xlabel "x" 0.0,1.0
смещает ось Х на высоту одной буквы вверх. Если задать положительное смещение по Y, подпись оси X налезает на содержимое графика, как показано на рисунках ниже.



Y offset = 0




Y offset = +5



Y offset = -5

если смещение по Y отрицательное, расстояние между подписью оси X и графиком становится больше.

Gnuplot пытается нарисовать график таким большим, насколько это возможно, так что высота графика становится больше, когда подпись оси Х смещается вверх. И наоборот, график становится меньше, когда подпись к оси Х смещается вниз.

10 комментариев:

  1. Михаил, я тебя хотел спросить, ты с терминалами pstricks, metapost или pslatex не игрался?

    Всё таки postscript enhanced выглядит не так красиво, как текст отрендеренный \LaTeX. А pstricks, metapost и pslatex надписи средствами LaTeX всё таки рисуют.

    У меня никак не дойдут руки с ними разобраться, но мне кажется, результат будет гораздо симпатичнее.

    Ещё из экспериментов с терминалами gnuplot, которые хочу попробовать — , который использует PGF/TikZ для отрисовки. Всё таки самый лучший (ИМХО) рисовальный пакет для LaTeX, с поддержкой прозрачности, цветов, PS и PDF.

    Если есть какой-то опыт с этими терминалами — дай знать :)

    ОтветитьУдалить
  2. 2 jetxee пишет...
    Михаил, я тебя хотел спросить, ты с терминалами pstricks, metapost или pslatex не игрался?
    Некоторое время игрался, но как-то результаты меня не впечатлили и я это бросил. Особой разницы не заметил.

    Всё таки postscript enhanced выглядит не так красиво, как текст отрендеренный \LaTeX.
    Я не большой эстет в таких делах, потому как журналы устраивает и простой вывод гнуплота. Меня тем более :-)

    А pstricks, metapost и pslatex надписи средствами LaTeX всё таки рисуют.
    Метапост мне пока не нужен, у меня нет таких навороченных рисунков, где мне не хватило бы Inkscape. Но попробовать можно.


    из экспериментов с терминалами gnuplot, которые хочу попробовать — , который использует PGF/TikZ для отрисовки. Всё таки самый лучший (ИМХО) рисовальный пакет для LaTeX, с поддержкой прозрачности, цветов, PS и PDF.
    За цветные графики журналы просят немалых денег, да и мне по работе этого в общем не требуется.

    Но попробую другие терминалы. Тем более я тут на неделю уезжаю в отпуск - будет время :-)

    Если есть какой-то опыт с этими терминалами — дай знать
    Непременно.

    ОтветитьУдалить
  3. Спасибо, за очень интересную серию статей. Скажите, а как конвертируете в изображения? Скажем png. Я пробовал делать вывод png, но получается график очень плохого качества. Пробовал ps-файл перегонять через gs, та же фигня. Спас только gsview

    ОтветитьУдалить
  4. Спасибо за ответы!

    У меня если руки дойдут с чем-то из этих терминалов разобраться, в свой блог отпишу.

    2can3p:

    Я обычно с помощью Imagemagick (convert) конвертирую изображения. Примерно так:

    convert -density 300 myplot.eps -resize 1024 myplot.png

    Хитрость в том, что вначале я задаю
    разрешение (-density 300 означает, что следущий за этой опцией EPS файл растеризуется с разрешением 300 точек на дюйм), а уже затем масштабирую к нужному мне растровому разрешению (-resize 1024 — 1024 пикселей по самой длинной стороне).

    ОтветитьУдалить
  5. Помогите, пожалуйста. Я хочу печатать греческие букв, с индексами и русские буквы. Работаю в windows. Делаю так, как говорится в статье, но получаю один и тот же результат. Все руководства на английском, поэтому недопонимаю некоторых вещей. В инструкции по установке прописано, что надо как-то интегрировать программу, чтобы она различала шрифты (если я правильно поняла), не не совсем понимаю, как это сделать.
    Вот текс ошибки, которая выдается
    gnuplot> set term postscript enhanced
    Terminal type set to 'postscript'
    Options are 'eps enhanced defaultplex \
    leveldefault monochrome colortext \
    dashed dashlength 1.0 linewidth 1.0 butt \
    palfuncparam 2000,0.003 \
    "Helvetica" 14 '
    Буду очень признательна, если Вы поможете разобраться с этой проблемой.

    ОтветитьУдалить
  6. 2 Irina комментирует...

    Помогите, пожалуйста. Я хочу печатать греческие букв, с индексами и русские буквы. Работаю в windows.За Windows я, к сожалению, не в ответе - мне даже проверить негде.

    В инструкции по установке прописано, что надо как-то интегрировать программу, чтобы она различала шрифты (если я правильно поняла)Если я всё правильно понял, то нужно явно указывать шрифты. Я, кстати, сам на этом деле погорел однажды: повставлял всюду Гельветику, а под виндой русские символы не отображаются. Если это то, о чём вы пишете, попробуйте сделать так:

    Шапка:

    set terminal postscript 'NimbusSanL-Regu' eps enhanced solid

    и в осях тоже:

    set xlabel "Параметр регуляризации, {/Symbol a} = 10^n" font "NimbusSanL-Regu,18"

    Это внедрит шрифт NimbusSanL-Regu в график. Естественно, он у вас должен быть.


    Вот текс ошибки, которая выдается
    gnuplot> set term postscript enhanced
    Terminal type set to 'postscript'
    Options are 'eps enhanced defaultplex \
    leveldefault monochrome colortext \
    dashed dashlength 1.0 linewidth 1.0 butt \
    palfuncparam 2000,0.003 \
    "Helvetica" 14 '
    Я не вижу ни текста гнуплотовского графика, ни исходных данных. Лучше их выложить или прислать мне на почту mydebianblog собака джимейл точка ком.

    ОтветитьУдалить
  7. Спасибо большое за ответ! Но, к сожалению, так и не рисует гнуплот у меня графики с греческим буквами в подписях к осям. С русскими буквами относительно лучше дело обстоит:
    set encoding koi8r
    только один глюк: когда нажимаю на клавишу с буквой "я", gnuplot закрывается моментально.
    Про шрфты я уже на одном из сайтов читала, меняла, но для подстрочных символов и греческих букв это не изменило ситуацию.
    После ввода
    set terminal postscript 'NimbusSanL-Regu' eps enhanced solid
    выдает все ту же ошибку
    gnuplot> set terminal postscript 'NimbusSanL-Regu' eps enhanced solid
    %%Trailer
    %%DocumentFonts: Symbol NimbusSanL-Regu
    Terminal type set to 'postscript'
    Options are 'eps enhanced defaultplex \
    leveldefault monochrome colortext \
    solid dashlength 1.0 linewidth 1.0 butt \
    palfuncparam 2000,0.003 \
    "NimbusSanL-Regu" 14 '
    сами графики я из текстовых файлов строю, ничего особенного, к примеру
    'data4.dat'
    3 5
    3.2 5
    3.4 4
    3.6 4
    3.8 4
    4.0 3
    4.2 3
    4.4 3
    4.6 3
    4.8 3
    5 2
    5.2 2
    5.4 2
    5.6 1
    plot 'data4.dat' using 1:2 smooth csplines notitle w l lt 2 lw 1

    Сам гнуплот ругается после слов postscript и enhanced.

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

    ОтветитьУдалить
  8. синтаксис команды перемещения положения подписи сейчас вроде немного другой - у меня set xlabel offset x,y

    ОтветитьУдалить
  9. а как в gnuplot задать толщину осей?

    ОтветитьУдалить
  10. невозможно напечатать в командной строке гнуплота русских букв. Они просто не печатаются.
    Как это исправить?

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