Найти тему
radiophysics

Как сделать красивый график в векторном формате

Чтобы научная статья была хорошо читаемой и была максимально полезна читателям, необходимо правильно изобразить графики, добавить подписи, метки по осям, легенду. На мой взгляд, очень красиво получается сделать графики в связке gnuplot+latex, к тому же результат получается векторным. Не знаю, насколько распространена такая схема, но среди моих коллег многие используют такой способ построения графиков.

Подготовив один шаблон картинки нужного размера, можно выполнить все графики в одной работе в одном стиле с одинаковым размером шрифта. Выберем, например, размер картинки 10см*8см, для этого зададим терминал gnuplot следующим образом:

  • set terminal epslatex size 10.0cm, 8.0cm

Поскольку такой терминал gnuplot предполагает создание на выходе файла, а не отрисовку в отдельном окне, нужно также задать имя выходного файла:

  • set output "temptex.tex"

Ниже привожу скрипт на gnuplot целиком, если нужно, с удовольствием разберу работу с gnuplot поподробнее, но здесь будем двигаться быстрее, чтобы рассказать, как именно использовать gnuplot и latex для получения графика в векторе. Скрипт на gnuplot:

  • set terminal epslatex size 10.0cm, 8.0cm
  • set output "temptex.tex"
  • set border 15
  • set key at screen 0.9,0.95 spacing 1.8
  • set tmargin at screen .960
  • set bmargin at screen .080
  • set lmargin at screen .060
  • set rmargin at screen .890
  • set xrange [1:20]
  • set xtics (2, 4, 6, 8, 10, 12, 14, 16, 18, "\\large $x$" 20) out offset 0,0.1
  • set yrange [-0.4:1]
  • set ytics (-0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, "\\rotatebox{0}{$y$}" 1) out offset 0.8,0
  • plot sin(x)/x w lp lw 2 pt 5 ps 1 title "$\\frac{\\sin x}{x}$", cos(x)/x w lp lw 2 pt 7 ps 1 title "$\\frac{\\cos x}{x}$"

Еще на одну деталь в этом скрипте обращу внимание: текст в кавычках, относящийся к различным тектовым меткам на графике будет на следующем этапе интерпретировать latex, поэтому он пишется на языке latex, можно использовать, в частности, математическое окружение.

Запуск скрипта командой "gnuplot x.gnuplot", где наш файл со скриптом gnuplot называется "x.gnuplot", дает файл temptex.tex, поскольку так мы настроили gnuplot.

-2

Теперь нужно создать файл-шаблон latex, в который встраивается этот файл temptex.tex, выданный gnuplot:

  • \documentclass{revtex4-1}
  • \usepackage[utf8]{inputenc}
  • \usepackage[russian]{babel}
  • \usepackage{graphicx,xcolor}
  • \usepackage{amssymb,amsfonts,amsmath,mathtext,enumerate}
  • \usepackage[14pt]{extsizes}
  • \usepackage{geometry}
  • \geometry{papersize={100mm, 80mm},total={100mm, 80mm},top=0mm,left=0mm}
  • \setlength{\hoffset}{0cm}
  • \setlength{\voffset}{0cm}
  • \begin{document}
  • \input{temptex}
  • \end{document}

В этом шаблоне latex еще раз указываются размеры картинки на выходе, в таком варианте размеры терминала gnuplot и картинки latex должны совпадать. В преамбуле этого шаблона можно подключить все необходимые пакеты, чтобы использовать их в текстовых полях в скрипте gnuplot.

В конце нужно выполнить команду "pdflatex maintex.tex", где "maintex.tex" является именем файла, в который мы написали шаблон latex. На выходе получится pdf файл, содержащий векторное изображение.

Эти две команды ("gnuplot x.gnuplot" и "pdflatex maintex.tex") вместе с дополнительной командой "rm temptex-eps-converted-to.pdf temptex.tex temptex.eps *.aux *.log *.bib" для очистки временных файлов можно добавить в скрипт bash (linux или power shell в windows) и строить картинку в векторном формате выполнением одного скрипта. Поскольку дзен не поддерживает векторный формат, график пришлось растеризовать и вот примерный результат:

-3

Здесь график дискретный, но если повторите процедуру, описанную выше, получите очень презентабельный векторный график.

Если интересны другие шаблоны для построения разных типов графиков, пишите, буду рад сделать, если это полезно. Вообще возможности gnuplot почти не ограничены, а функция latex в этом случае очень примитивна, поэтому очень рекомендую этот спобоб всем:)

Подписывайтесь на канал!

Наука
7 млн интересуются