> 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/uk/specializovani/08-pgfplots-package.md).

# Пакет pgfplots

## Вступ

Функція `pgfplots` пакет, який базується на [`TikZ`](/latex/uk/risunki-ta-tablici/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/uk/zapitannya-ta-vidpovidi/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.md) для отримання додаткових відомостей про те, як налаштувати зовнішнє винесення tikz у вашому проєкті 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/b10d6b1d7e6aef3454289d8acfdea3e167589fbd)

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

Оскільки `pgfplots` базується на `tikz` графік має бути всередині `tikzpicture` середовища. Тоді оголошення середовища `\begin{axis}`, `\end{axis}` встановить правильне масштабування графіка — перегляньте [Довідковий посібник](#reference-guide) для інших осьових середовищ.

Щоб додати власне графік, використовується команда `\addplot[color=red]{log(x)};` використовується. Усередині квадратних дужок `[...]`, можна передавати деякі параметри; тут ми встановлюємо `color` графіка на `red`. Квадратні дужки є обов’язковими; якщо параметри не передаються, залиште між ними порожнє місце. Усередині фігурних дужок ви вказуєте функцію для побудови. Важливо пам’ятати, що ця команда має закінчуватися крапкою з комою (;).

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

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

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

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

`pgfplots`Можливості побудови 2D-графіків дуже широкі — ви можете налаштовувати графіки відповідно до своїх потреб. Проте параметри за замовчуванням зазвичай дають дуже добрі результати, тож усе, що вам потрібно, — це подати дані, а 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/cb5a8be729b96791d0f9289a8644ee611246e707)

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

Проаналізуймо нові команди рядок за рядком:

**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/8fd24879424898eb5ed66e9dfe1afe35518ee0da)

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

Тут є кілька нових команд і параметрів:

**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/cf5b28250332959d005be05ed3e5b8a4610a1646)

[Відкрийте приклад проєкту точкової діаграми в 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=Рік,
	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{Чоловіки,Жінки}
\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/ad6d81bf4ad0ba5c4588dbdeeb8fdf806889f719)

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

Фігура починається з ([раніше поясненого](#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/f86b8fe2e4b8d8eb435009653a08c93ca1ee4bb7)

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

Більшість команд тут уже було пояснено, але є 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/c16732fffb215fc494b080ac8976aa933b5a3339)

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

Це графік кількох контурних ліній для того самого рівняння, що й у попередньому розділі. Значення `поле назви` параметра міститься у фігурних дужках, тому що він містить кому; тож ми використовуємо групувальні дужки, щоб уникнути будь-якої плутанини з іншими параметрами, переданими до `\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 теж підійде; у такому разі замість gnuplot у команді пишіть matlab). По-друге, підпараметр 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/8b4d7650a41aee4e171a498132d0aa7dcb1fe8af)

#### Пояснення даних

Точки, передані до `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/2fcbaa4915746879782a919b4f1ad7e3941c9e23)

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

У цьому прикладі є лише дві нові речі: по-перше, `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 only work on 3d plots). |
| **colormap**                | колірна схема, що використовується в графіку; її можна налаштувати, але є також деякі попередньо визначені colormaps                       | hot, hot2, jet, blackwhite, bluered, cool, greenyellow, redyellow, violet.                                                                                                                                                                                                                                      |

## Додаткове читання

Докладніше див.:

* [Використання кольорів у LaTeX](/latex/uk/formatuvannya/13-using-colors-in-latex.md)
* [Пакет TikZ](/latex/uk/risunki-ta-tablici/05-tikz-package.md)
* [Винесення pgfplots і tikzpictures назовні](/latex/uk/zapitannya-ta-vidpovidi/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.md)
* [Вставлення зображень](/latex/uk/inshi-temi/27-inserting-images.md)
* [Списки таблиць і рисунків](/latex/uk/risunki-ta-tablici/03-lists-of-tables-and-figures.md)
* [Розміщення зображень і таблиць](/latex/uk/risunki-ta-tablici/02-positioning-images-and-tables.md)
* [Малювання діаграм безпосередньо в LaTeX](/latex/uk/risunki-ta-tablici/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/uk/specializovani/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.
