> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/latex/ru/specializirovannye/08-pgfplots-package.md).

# Пакет pgfplots

## Введение

Это `pgfplots` пакет, который основан на [`TikZ`](/latex/ru/risunki-i-tablicy/05-tikz-package.md), является мощным инструментом визуализации и идеально подходит для создания научно-технической графики. Основная идея состоит в том, что вы задаёте входные данные/формулу, и `pgfplots` делает всё остальное.

### Преамбула документа

Чтобы использовать `pgfplots` пакет в ваш документ, добавьте следующую строку в преамбулу:

`\usepackage{pgfplots}`

Вы также можете настроить поведение `pgfplots` в преамбуле документа. Например, чтобы изменить размер каждого графика и гарантировать обратную совместимость (рекомендуется), добавьте следующую строку:

`\pgfplotsset{width=10cm,compat=1.9}`

Это изменяет размер каждого `pgfplot` рисунка до 10 сантиметров, что очень много; вы можете использовать другие единицы (pt, mm, in). Параметр *compat* нужен для того, чтобы код работал с версией пакета 1.9 или более поздней.

### Время компиляции (краткая справка)

Когда оригинальный движок TeX был задуман/написан более 40 лет назад, он не был рассчитан на *прямое* создание графики — они должны были быть файлами, созданными внешними программами (например, MetaPost), и импортировались в вёрстаемый документ. Появление pdfTeX — который тесно основан на оригинальном программном обеспечении TeX — принесло возможность создавать графику *непосредственно* с помощью новых встроенных команд языка TeX в pdfTeX (называемых *примитивов*) , которые могут выводить операторы/данные PDF, необходимые для создания графики. Появление pdfTeX привело к разработке сложных пакетов LaTeX для графики, таких как `TikZ`, `pgfplots` и т. д., способных создавать графику, закодированную с помощью высокоуровневых команд LaTeX.

Однако «за кулисами» и глубоко внутри движка pdfTeX (и других движков) эти высокоуровневые команды LaTeX для графики нужно обработать, «преобразовав» их обратно в низкоуровневые (примитивные) команды движка pdfTeX, которые фактически генерируют (выводят) операторы PDF, необходимые для создания результирующего рисунка(ов). Такая обработка графических команд LaTeX — разворачивание и выполнение примитивов — может занимать заметное количество времени. Даже одна высокоуровневая команда LaTeX для графики вместе с соответствующими данными может потребовать многократного выполнения *множеством* низкоуровневых (примитивных) команд движка TeX. С точки зрения конечного пользователя документы, содержащие несколько `pgfplots` рисунков и/или очень сложную графику, могут рендериться (компилироваться) довольно долго.

### Сокращение времени компиляции

Чтобы повысить скорость компиляции документа, вы можете настроить `pgfplots` пакет так, чтобы он экспортировал рисунки в отдельные PDF-файлы, а затем импортировал их в документ: скомпилировать один раз, затем повторно использовать рисунки. Для этого добавьте показанный ниже код в преамбулу:

```
\usepgfplotslibrary{external}
\tikzexternalize
```

См. [эту справочную статью](/latex/ru/voprosy-i-otvety/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.md) для получения дополнительных сведений о том, как настроить tikz-externalization в вашем проекте Overleaf.

## Базовый пример (также с выносом рисунков во внешние файлы)

```latex
\documentclass{article}
\usepackage[margin=0.25in]{geometry}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.9}

% Мы вынесем рисунки во внешние файлы
\usepgfplotslibrary{external}
\tikzexternalize

\begin{document}

Первый пример — это 2D- и 3D-математические выражения, построенные рядом друг с другом.

%Здесь начинается 2D-график
\begin{tikzpicture}
\begin{axis}
\addplot[color=red]{exp(x)};
\end{axis}
\end{tikzpicture}
%Здесь заканчивается 2D-график
\hskip 5pt
%Здесь начинается 3D-график
\begin{tikzpicture}
\begin{axis}
\addplot3[
    surf,
]
{exp(-x^2-y^2)*x};
\end{axis}
\end{tikzpicture}
%Здесь заканчивается 3D-график

\end{document}
```

[Откройте этот `pgfplots` пример в Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+example+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.25in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%0A%25+We+will+externalize+the+figures%0A%5Cusepgfplotslibrary%7Bexternal%7D%0A%5Ctikzexternalize%0A%0A%5Cbegin%7Bdocument%7D%0A%0AFirst+example+is+2D+and+3D+math+expressions+plotted+side-by-side.%0A%0A%25Here+begins+the+2D+plot%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5Caddplot%5Bcolor%3Dred%5D%7Bexp%28x%29%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%25Here+ends+the+2D+plot%0A%5Chskip+5pt%0A%25Here+begins+the+3D+plot%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5Caddplot3%5B%0A++++surf%2C%0A%5D%0A%7Bexp%28-x%5E2-y%5E2%29%2Ax%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%25Here+ends+the+3D+plot%0A%0A%5Cend%7Bdocument%7D)

На следующем изображении показан результат, полученный с помощью приведённого выше кода:

![Plgplotsex1OLV2.png](/files/759eb9da87d4c854a1da6e443ad92d8ce8fc7f78)

### Пояснение к коду

Поскольку `pgfplots` основан на `tikz` график должен находиться внутри `tikzpicture` окружения. Затем объявление окружения `\begin{axis}`, `\end{axis}` установит правильное масштабирование графика — см. [справочнике](#reference-guide) для других окружений осей.

Чтобы добавить сам график, используется команда `\addplot[color=red]{log(x)};` Внутри квадратных скобок `[...]`, можно передавать некоторые параметры; здесь мы задаём `цвет` графика как `red`. Квадратные скобки обязательны: если параметры не передаются, оставьте между ними пустое место. Внутри фигурных скобок вы указываете функцию для построения. Важно помнить, что эта команда должна заканчиваться точкой с запятой (;).

Чтобы разместить второй график рядом с первым, объявите новое `tikzpicture` окружение. Не вставляйте новую строку, а небольшой промежуток; в данном случае `\hskip 10pt` вставит пустое пространство шириной 10pt.

Остальной синтаксис такой же, за исключением `\addplot3 [surf,]{exp(-x^2-y^2)*x};`. Это добавит 3D-график, а параметр `surf` в квадратных скобках означает, что это поверхностный график. Функция для построения должна быть помещена в фигурные скобки. И снова не забудьте поставить точку с запятой (;) в конце команды.

**Примечание**: Хорошей практикой считается делать отступы в коде — см. второй график в примере выше — и добавлять запятую (,) в конце каждого параметра, передаваемого `\addplot`. Так код становится более читаемым, и при необходимости в него легче добавлять дополнительные параметры.

## 2D-графики

`pgfplots`Возможности построения 2D-графиков в LaTeX очень широки — вы можете настраивать графики под свои требования. Тем не менее параметры по умолчанию обычно дают очень хорошие результаты, поэтому всё, что вам нужно, — это подать данные, а LaTeX сделает всё остальное.

### Построение математических выражений

Вот пример:

```latex
\begin{tikzpicture}
\begin{axis}[
    axis lines = left,
    xlabel = \(x\),
    ylabel = {\(f(x)\)},
]
%Ниже определена красная парабола
\addplot [
    domain=-10:10,
    samples=100,
    color=red,
]
{x^2 - 2*x - 1};
\addlegendentry{\(x^2 - 2x - 1\)}
%Здесь определена синяя парабола
\addplot [
    domain=-10:10,
    samples=100,
    color=blue,
    ]
    {x^2 + 2*x + 1};
\addlegendentry{\(x^2 + 2x + 1\)}

\end{axis}
\end{tikzpicture}
```

[Откройте этот `pgfplots` пример в Overleaf.](https://www.overleaf.com/docs?engine=\&snip_name=pgfplots+example+2\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.25in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A++++axis+lines+%3D+left%2C%0A++++xlabel+%3D+%5C%28x%5C%29%2C%0A++++ylabel+%3D+%7B%5C%28f%28x%29%5C%29%7D%2C%0A%5D%0A%25Below+the+red+parabola+is+defined%0A%5Caddplot+%5B%0A++++domain%3D-10%3A10%2C+%0A++++samples%3D100%2C+%0A++++color%3Dred%2C%0A%5D%0A%7Bx%5E2+-+2%2Ax+-+1%7D%3B%0A%5Caddlegendentry%7B%5C%28x%5E2+-+2x+-+1%5C%29%7D%0A%25Here+the+blue+parabola+is+defined%0A%5Caddplot+%5B%0A++++domain%3D-10%3A10%2C+%0A++++samples%3D100%2C+%0A++++color%3Dblue%2C%0A++++%5D%0A++++%7Bx%5E2+%2B+2%2Ax+%2B+1%7D%3B%0A%5Caddlegendentry%7B%5C%28x%5E2+%2B+2x+%2B+1%5C%29%7D%0A%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

Результат работы этого кода показан на изображении ниже — преамбула документа LaTeX добавляется автоматически, когда вы открываете ссылку:

![Plgplotsex2.png](/files/d33d444c798704d29963803355d3bc33ca95a0b5)

#### Пояснение к коду

Давайте разберём новые команды построчно:

**axis lines = left.**

Это задаёт оси только слева и снизу графика вместо стандартной рамки. Дополнительные варианты настройки см. в справочном руководстве.

**xlabel = (x) и ylabel = {(f(x))}.**

Названия параметров говорят сами за себя: они позволяют добавить подписи к горизонтальной и вертикальной осям. Обратите внимание на значение ylabel в фигурных скобках: эти скобки говорят pgfplots, как группировать текст. У xlabel тоже могли быть скобки. Это полезно для сложных подписей, которые могут запутать pgfplots.

**\addplot.**

Это добавит график к осям; общее использование было описано во введении. В этом примере есть два новых параметра.

**domain=-10:10.**

Это задаёт диапазон значений x.

**samples=100.**

Определяет число точек в интервале, заданном domain. Чем больше значение samples, тем более чёткий график вы получите, но тем дольше он будет строиться.

**\addlegendentry{(x^2 - 2x - 1)}.**

Это добавляет легенду, чтобы обозначить функцию x^2 - 2x - 1.

Чтобы добавить ещё один график к рисунку, просто напишите новую `\addplot` запись.

### Построение по данным

Научные исследования часто дают данные, которые необходимо анализировать. Следующий пример показывает, как построить данные с помощью *pgfplots*:

```latex
Построение по данным:

\begin{tikzpicture}
\begin{axis}[
    title={Температурная зависимость растворимости CuSO\(_4\cdot\)5H\(_2\)O},
    xlabel={Температура [\textcelsius]},
    ylabel={Растворимость [г на 100 г воды]},
    xmin=0, xmax=100,
    ymin=0, ymax=120,
    xtick={0,20,40,60,80,100},
    ytick={0,20,40,60,80,100,120},
    legend pos=north west,
    ymajorgrids=true,
    grid style=dashed,
]

\addplot[
    color=blue,
    mark=square,
    ]
    coordinates {
    (0,23.1)(10,27.5)(20,32)(30,37.8)(40,44.6)(60,61.8)(80,83.8)(100,114)
    };
    \legend{CuSO\(_4\cdot\)5H\(_2\)O}

\end{axis}
\end{tikzpicture}
```

[Откройте этот `pgfplots` пример в Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+example+3\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Btextcomp%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0APlotting+from+data%3A%0A%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A++++title%3D%7BTemperature+dependence+of+CuSO%5C%28_4%5Ccdot%5C%295H%5C%28_2%5C%29O+solubility%7D%2C%0A++++xlabel%3D%7BTemperature+%5B%5Ctextcelsius%5D%7D%2C%0A++++ylabel%3D%7BSolubility+%5Bg+per+100+g+water%5D%7D%2C%0A++++xmin%3D0%2C+xmax%3D100%2C%0A++++ymin%3D0%2C+ymax%3D120%2C%0A++++xtick%3D%7B0%2C20%2C40%2C60%2C80%2C100%7D%2C%0A++++ytick%3D%7B0%2C20%2C40%2C60%2C80%2C100%2C120%7D%2C%0A++++legend+pos%3Dnorth+west%2C%0A++++ymajorgrids%3Dtrue%2C%0A++++grid+style%3Ddashed%2C%0A%5D%0A%0A%5Caddplot%5B%0A++++color%3Dblue%2C%0A++++mark%3Dsquare%2C%0A++++%5D%0A++++coordinates+%7B%0A++++%280%2C23.1%29%2810%2C27.5%29%2820%2C32%29%2830%2C37.8%29%2840%2C44.6%29%2860%2C61.8%29%2880%2C83.8%29%28100%2C114%29%0A++++%7D%3B%0A++++%5Clegend%7BCuSO%5C%28_4%5Ccdot%5C%295H%5C%28_2%5C%29O%7D%0A++++%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

Результат работы этого кода показан на изображении ниже — преамбула документа LaTeX добавляется автоматически, когда вы открываете ссылку:

![Plgplotsex3.png](/files/d3e2f5ca66e5135f77402534df41f8c96fc54b8b)

#### Пояснение к коду

Здесь есть несколько новых команд и параметров:

**title={Температурная зависимость растворимости CuSO(\_4\cdot)5H(\_2)O}.**

Как и следовало ожидать, задаёт заголовок рисунка. Заголовок будет отображаться над графиком.

**xmin=0, xmax=100, ymin=0, ymax=120.**

Минимальные и максимальные границы осей x и y.

**xtick={0,20,40,60,80,100}, ytick={0,20,40,60,80,100,120}.**

Точки, в которых размещаются метки. Если пусто, деления устанавливаются автоматически.

**legend pos=north west.**

Положение окна легенды. Смотрите справочное руководство для других вариантов.

**ymajorgrids=true.**

Это включает/выключает линии сетки в местах делений по оси y. Используйте xmajorgrids, чтобы включить линии сетки по оси x.

**grid style=dashed.**

Самоочевидно. Для отображения пунктирных линий сетки.

**mark=square.**

Это рисует квадратную метку в каждой точке массива координат. Каждая метка будет соединена со следующей прямой линией.

**coordinates {(0,23.1)(10,27.5)(20,32)...}**

Координаты точек, которые нужно построить. Это данные, которые вы хотите проанализировать графически.

Если данные находятся в файле, что чаще всего и бывает; вместо команд `\addplot` и `coordinates` вам следует использовать `\addplot table {file_with_the_data.dat}`, остальные параметры в этом окружении допустимы.

### Точечные диаграммы

Точечные диаграммы используются для представления информации с помощью различных маркеров и обычно применяются при вычислении статистической регрессии. В этом примере мы создадим точечную диаграмму, используя данные, содержащиеся в файле под названием `scattered_example.dat`, в котором данные выглядят так:

```
GPA  ma  ve  co   un
3.45 643 589 3.76 3.52
2.78 558 512 2.87 2.91
2.52 583 503 2.54 2.4
3.67 685 602 3.83 3.47
3.24 592 538 3.29 3.47
2.1 562 486 2.64 2.37
...
```

Наша точечная диаграмма использует первые две колонки данных:

```latex
\begin{tikzpicture}
\begin{axis}[
    enlargelimits=false,
]
\addplot+[
    only marks,
    scatter,
    mark=halfcircle*,
    mark size=2.9pt]
table[meta=ma]
{scattered_example.dat};
\end{axis}
\end{tikzpicture}
```

![Scattered.png](/files/b1c094dbbbe8c7392e174fa1c961f283f439000a)

[Откройте пример проекта точечной диаграммы в Overleaf (содержит файл данных `scattered_example.dat`).](https://www.overleaf.com/project/new/template/20099?id=68399290\&templateName=Scatter+plot+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

#### Пояснение к коду

Параметры, передаваемые в `axis` и `addplot` окружения, также можно использовать в графике по данным, за исключением `scatter`. Ниже описание кода:

**enlarge limits=false**

Это сожмёт оси так, чтобы точки с максимальными и минимальными значениями оказались на краю графика.

**only marks**

Совершенно явно: поставит метку в каждой точке.

**scatter**

Когда используется scatter, точки окрашиваются в зависимости от значения, а цвет задаётся параметром meta, объяснённым ниже.

**mark=halfcircle**\*

Вид метки, используемой в каждой точке; список возможных значений см. в справочном руководстве.

**mark size=2.9pt**

Размер каждой метки, можно использовать разные единицы.

**table\[meta=ma]{scattered\_example.dat};**

Здесь команда table сообщает latex, что данные для построения находятся в файле. Параметр meta=ma передаётся, чтобы выбрать столбец, определяющий цвет каждой точки. В фигурных скобках указано имя файла данных.

### Столбчатые диаграммы

Столбчатые диаграммы (также известные как bar charts и bar plots) используются для отображения собранных данных, в основном статистических данных о какой-либо популяции. Столбчатые диаграммы в `pgfplots` очень гибко настраиваются, но здесь мы покажем простой пример:

```latex
\begin{tikzpicture}
\begin{axis}[
	x tick label style={
		/pgf/number format/1000 sep=},
	ylabel=Year,
	enlargelimits=0.05,
	legend style={at={(0.5,-0.1)},
	anchor=north,legend columns=-1},
	ybar interval=0.7,
]
\addplot
	coordinates {(2012,408184) (2011,408348)
		 (2010,414870) (2009,412156)};
\addplot
	coordinates {(2012,388950) (2011,393007)
		(2010,398449) (2009,395972)};
\legend{Men,Women}
\end{axis}
\end{tikzpicture}
```

[Откройте этот `pgfplots` пример кода столбчатой диаграммы в Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+bar+chart+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Btextcomp%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A%09x+tick+label+style%3D%7B%0A%09%09%2Fpgf%2Fnumber+format%2F1000+sep%3D%7D%2C%0A%09ylabel%3DYear%2C%0A%09enlargelimits%3D0.05%2C%0A%09legend+style%3D%7Bat%3D%7B%280.5%2C-0.1%29%7D%2C%0A%09anchor%3Dnorth%2Clegend+columns%3D-1%7D%2C%0A%09ybar+interval%3D0.7%2C%0A%5D%0A%5Caddplot+%0A%09coordinates+%7B%282012%2C408184%29+%282011%2C408348%29%0A%09%09+%282010%2C414870%29+%282009%2C412156%29%7D%3B%0A%5Caddplot+%0A%09coordinates+%7B%282012%2C388950%29+%282011%2C393007%29+%0A%09%09%282010%2C398449%29+%282009%2C395972%29%7D%3B%0A%5Clegend%7BMen%2CWomen%7D%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

Результат работы этого кода показан на изображении ниже — преамбула документа LaTeX добавляется автоматически, когда вы открываете ссылку:

![Barchartsexample.png](/files/6c70933718dfd36645298bc206f06733607918e7)

#### Пояснение к коду

Рисунок начинается с ([ранее объяснённого](#introduction)) объявления `tikzpicture` и `axis` окружения, но `axis` объявление имеет ряд новых параметров:

**x tick label style={/pgf/number format/1000 sep=}**

Этот фрагмент кода определяет полный стиль для графика. С этим стилем вы можете включить несколько команд \addplot в пределах этого окружения axis; они будут согласованы и хорошо смотреться вместе без дополнительных настроек (параметр ybar, описанный ниже, обязателен для этого).

**enlargelimits=0.05.**

Увеличение границ в столбчатой диаграмме необходимо, потому что таким графикам часто требуется дополнительное пространство над столбцами, чтобы выглядеть лучше и/или добавить подпись. Тогда число 0.05 относится к общей высоте графика.

**legend style={at={(0.5,-0.2)}, anchor=north,legend columns=-1}**

Опять же, в большинстве случаев это будет работать нормально. Если нужно, измените значение -0.2, чтобы расположить легенду ближе/дальше от оси x.

**ybar interval=0.7,**

Толщина каждого столбца. Значение 1 означает, что столбцы будут стоять вплотную друг к другу без промежутков, а значение 0 — что столбцов не будет, а будут только вертикальные линии.

Это `coordinates` в таком типе графика определяют базовую точку столбца и его высоту.

Подписи на оси y будут отображать до 4 цифр. Если числа, с которыми вы работаете, больше 9999 `pgfplots` будет использовать ту же нотацию, что и в примере.

## 3D-графики

`pgfplots` имеет возможности построения 3D-графиков, которых вы можете ожидать от программы для графиков.

### Построение математических выражений

Простой пример этого есть в [введении](#introduction), давайте поработаем над чем-нибудь чуть более сложным:

```latex
\begin{tikzpicture}
\begin{axis}[
    title=Пример с использованием параметра mesh,
    hide axis,
    colormap/cool,
]
\addplot3[
    mesh,
    samples=50,
    domain=-8:8,
]
{sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)};
\addlegendentry{\(\frac{sin(r)}{r}\)}
\end{axis}
\end{tikzpicture}
```

[Откройте этот `pgfplots` пример 3D в Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+3D+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A++++title%3DExample+using+the+mesh+parameter%2C%0A++++hide+axis%2C%0A++++colormap%2Fcool%2C%0A%5D%0A%5Caddplot3%5B%0A++++mesh%2C%0A++++samples%3D50%2C%0A++++domain%3D-8%3A8%2C%0A%5D%0A%7Bsin%28deg%28sqrt%28x%5E2%2By%5E2%29%29%29%2Fsqrt%28x%5E2%2By%5E2%29%7D%3B%0A%5Caddlegendentry%7B%5C%28%5Cfrac%7Bsin%28r%29%7D%7Br%7D%5C%29%7D%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

Результат работы этого кода показан на изображении ниже — преамбула документа LaTeX добавляется автоматически, когда вы открываете ссылку:

![Pgfplots3dexample.png](/files/53349dc18293c4f59cc1e518e9665a57c91d43cb)

#### Пояснение к коду

Большинство команд здесь уже было объяснено, но есть 3 новых момента:

**hide axis**

Этот параметр в окружении axis говорит сам за себя: оси отображаться не будут.

**colormap/cool**

Это цветовая схема, используемая в графике. Смотрите справочное руководство для других цветовых схем.

**mesh**

Этот параметр тоже говорит сам за себя; см. также параметр surf в вводном примере.

**Примечание**: При работе с тригонометрическими функциями `pgfplots` по умолчанию использует градусы, если угол задан в радианах (как в этом примере), нужно использовать `deg` функцию для преобразования в градусы.

### Контурные графики

В `pgfplots` можно строить контурные графики, но данные должны быть предварительно вычислены внешней программой. Давайте посмотрим пример:

```latex
\begin{tikzpicture}
\begin{axis}
[
    title={Контурный график, вид сверху},
    view={0}{90}
]
\addplot3[
    contour gnuplot={levels={0.8, 0.4, 0.2, -0.2}}
]
{sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)};
\end{axis}
\end{tikzpicture}
```

[Откройте этот `pgfplots` пример контурного графика в Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+contour+plot+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5B%0A++++title%3D%7BContour+plot%2C+view+from+top%7D%2C%0A++++view%3D%7B0%7D%7B90%7D%0A%5D%0A%5Caddplot3%5B%0A++++contour+gnuplot%3D%7Blevels%3D%7B0.8%2C+0.4%2C+0.2%2C+-0.2%7D%7D%0A%5D%0A%7Bsin%28deg%28sqrt%28x%5E2%2By%5E2%29%29%29%2Fsqrt%28x%5E2%2By%5E2%29%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%0A%5Cend%7Bdocument%7D)

Результат работы этого кода показан на изображении ниже — преамбула документа LaTeX добавляется автоматически, когда вы открываете ссылку:

![Contourplotexample.png](/files/877a742c1be5ba6086e40b05a4a475767ba51a03)

#### Пояснение к коду

Это график некоторых контурных линий для того же уравнения, что использовалось в предыдущем разделе. Значение параметра `title` находится внутри фигурных скобок, потому что оно содержит запятую, поэтому мы используем скобки группировки, чтобы избежать путаницы с другими параметрами, передаваемыми в `\begin{axis}` объявление. Здесь есть две новые команды:

**view={0}{90}**

Это изменяет вид графика. Параметр передаётся в окружение axis, что означает, что его можно использовать в любом другом типе 3D-графика. Первое значение — это поворот вокруг оси z в градусах; второе значение — поворот вида вокруг оси x. В этом примере, сочетая поворот на 0° вокруг оси z и поворот на 90° вокруг оси x, мы получаем вид графика сверху.

**contour gnuplot={levels={0.8, 0.4, 0.2, -0.2}}**

Эта строка кода делает две вещи: во-первых, она сообщает LaTeX использовать внешнее программное обеспечение gnuplot для вычисления контурных линий; в Overleaf это работает нормально, но если вы хотите использовать эту команду в локальной установке LaTeX, сначала нужно установить gnuplot (matlab тоже подойдёт, в таком случае в команде нужно написать matlab вместо gnuplot). Во-вторых, под-параметр levels — это список значений уровней высоты, для которых должны вычисляться контурные линии.

### Построение поверхности по данным

Чтобы построить набор данных в виде 3D-поверхности, нам нужны только координаты каждой точки. Эти координаты могут быть неупорядоченным набором или, в данном случае, матрицей:

```latex
\begin{tikzpicture}
\begin{axis}
\addplot3[
    surf,
]
coordinates {
(0,0,0) (0,1,0) (0,2,0)

(1,0,0) (1,1,0.6) (1,2,0.7)

(2,0,0) (2,1,0.7) (2,2,1.8)
};
\end{axis}
\end{tikzpicture}
```

[Откройте этот `pgfplots` пример 3D-поверхности в Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=plotting+a+surface+from+data+with+pgfplots\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5Caddplot3%5B%0A++++surf%2C%0A%5D+%0Acoordinates+%7B%0A%280%2C0%2C0%29+%280%2C1%2C0%29+%280%2C2%2C0%29%0A%0A%281%2C0%2C0%29+%281%2C1%2C0.6%29+%281%2C2%2C0.7%29%0A%0A%282%2C0%2C0%29+%282%2C1%2C0.7%29+%282%2C2%2C1.8%29%0A%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%0A%5Cend%7Bdocument%7D)

Результат работы этого кода показан на изображении ниже — преамбула документа LaTeX добавляется автоматически, когда вы открываете ссылку:

![3dsurfacedata.png](/files/ce477a8057b702b0485f68a4730f5b57b34ac3a2)

#### Пояснение к данным

Точки, передаваемые в `coordinates` параметр, считаются содержащимися в матрице 3 × 3, при этом пустая строка используется как разделитель для каждой строки матрицы.

Все параметры для 3D-графиков в этой статье применимы и к поверхностям, построенным по данным.

### Параметрический график

Синтаксис для параметрических графиков немного отличается. Давайте посмотрим пример:

```latex
\begin{tikzpicture}
\begin{axis}
    [
    view={60}{30},
    ]
\addplot3[
    domain=0:5*pi,
    samples = 60,
    samples y=0,
]
({sin(deg(x))},
{cos(deg(x))},
{x});
\end{axis}
\end{tikzpicture}
```

[Откройте этот `pgfplots` пример параметрического графика в Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+parametric+plot+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A++++%5B%0A++++view%3D%7B60%7D%7B30%7D%2C%0A++++%5D%0A%5Caddplot3%5B%0A++++domain%3D0%3A5%2Api%2C%0A++++samples+%3D+60%2C%0A++++samples+y%3D0%2C%0A%5D%0A%28%7Bsin%28deg%28x%29%29%7D%2C%0A%7Bcos%28deg%28x%29%29%7D%2C%0A%7Bx%7D%29%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

Результат работы этого кода показан на изображении ниже — преамбула документа LaTeX добавляется автоматически, когда вы открываете ссылку:

![Parametricplot.png](/files/dee32a0ef5db2768a708540d2d0848adec505df4)

#### Пояснение к коду

В этом примере есть только две новые вещи: во-первых, `samples y=0` чтобы предотвратить `pgfplots` соединение крайних точек спирали; и, во-вторых, способ передачи функции для построения в `addplot3` окружение. Каждая функция параметра группируется внутри фигурных скобок, а три параметра разделяются круглыми скобками.

## справочнике

| Команда/Параметр/Окружение | Описание                                                                                                                  | Возможные значения                                                                                                                                                                                                                                                                                                      |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **axis**                   | Обычные графики с линейным масштабированием                                                                               |                                                                                                                                                                                                                                                                                                                         |
| **semilogxaxis**           | логарифмическое масштабирование по x и обычное масштабирование по y                                                       |                                                                                                                                                                                                                                                                                                                         |
| **semilogyaxis**           | логарифмическое масштабирование по y и обычное масштабирование по x                                                       |                                                                                                                                                                                                                                                                                                                         |
| **loglogaxis**             | логарифмическое масштабирование по осям x и y                                                                             |                                                                                                                                                                                                                                                                                                                         |
| **axis lines**             | изменяет способ отображения осей. По умолчанию — '*бокс*                                                                  | box, left, middle, center, right, none                                                                                                                                                                                                                                                                                  |
| **legend pos**             | положение окна легенды                                                                                                    | south west, south east, north west, north east, outer north east                                                                                                                                                                                                                                                        |
| **mark**                   | тип меток, используемых при построении данных. Когда используется один символ, его внешний вид очень похож на саму метку. | \*, x , +, \|, o, asterisk, star, 10-pointed star, oplus, oplus\*, otimes, otimes\*, square, square\*, triangle, triangle\*, diamond, halfdiamond\*, halfsquare\*, right\*, left\*, Mercedes star, Mercedes star flipped, halfcircle, halfcircle\*, pentagon, pentagon\*, cubes. (cubes работают только в 3D-графиках). |
| **colormap**               | цветовая схема, используемая в графике; её можно настраивать, но есть и некоторые предопределённые цветовые карты         | hot, hot2, jet, blackwhite, bluered, cool, greenyellow, redyellow, violet.                                                                                                                                                                                                                                              |

## Дополнительное чтение

Для получения дополнительной информации см.:

* [Использование цветов в LaTeX](/latex/ru/formatirovanie/13-using-colors-in-latex.md)
* [Пакет TikZ](/latex/ru/risunki-i-tablicy/05-tikz-package.md)
* [Вынесение pgfplots и tikzpictures во внешние файлы](/latex/ru/voprosy-i-otvety/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.md)
* [Вставка изображений](/latex/ru/drugie-temy/27-inserting-images.md)
* [Списки таблиц и рисунков](/latex/ru/risunki-i-tablicy/03-lists-of-tables-and-figures.md)
* [Размещение изображений и таблиц](/latex/ru/risunki-i-tablicy/02-positioning-images-and-tables.md)
* [Рисование диаграмм непосредственно в LaTeX](/latex/ru/risunki-i-tablicy/04-picture-environment.md)
* [Это **pgfplots** документация пакета](http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf).
* [Пакеты TikZ и PGF: руководство для версии 3.0.0](http://mirror.utexas.edu/ctan/graphics/pgf/base/doc/pgfmanual.pdf)
* [Примеры TikZ и PGF на TeXample.net](http://www.texample.net/tikz/examples/all/)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/latex/ru/specializirovannye/08-pgfplots-package.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
