3D графики в LaTeX пакетом pgfplots в стиле MathCAD
Рассказано, как делать 3D графики в LaTeX файлах с помощью пакета pgfplots так, чтобы они были похожи на графики из MathCAD. Мне нравится такая цветовая схема как MathCAD, вот и решил попробовать.
📖 Содержание ⬇️
Содержание
Решение
Итак, используйте следующую карту цвета:
\pgfplotsset{
/pgfplots/colormap = {mathcad}{rgb255(0cm) = (76, 0, 128) rgb255(2cm) = (0, 14, 147) rgb255(4cm) = (0, 173, 171) rgb255(6cm) = (32, 205, 0) rgb255(8cm) = (229, 222, 0) rgb255(10cm) = (255, 13, 0)}
}
А это карта для графиков с стиле Matlab:
\pgfplotsset{
/pgfplots/colormap = {matlab}{rgb255(0cm) = (0, 0, 128) rgb255(1cm) = (0, 0, 255) rgb255(3cm) = (0, 255, 255) rgb255(5cm) = (255, 255, 0) rgb255(7cm) = (255, 0, 0) rgb255(8cm) = (128, 0, 0)}
}
В статье Установка и настройка программ для редактирования LaTeX файлов | ↗️ прочитайте, если надо, про установку всех нужных программ для работы с LaTeX.
Примеры
Ниже приведены примеры полных исходников некоторых примеров:
\documentclass[a4paper, 12pt]{report}
%%% Кодировки и шрифты %%%
\usepackage[T2A]{fontenc} % Поддержка русских букв
\usepackage[utf8]{inputenc} % Кодировка utf8
\usepackage[english, russian]{babel} % Языки: русский, английский
%%% Цвета %%%
\usepackage[usenames]{color}
\usepackage{color}
%%% Рисование графиков %%%
\usepackage{pgfplots}
\usepackage{float}
\definecolor{plotgrid}{HTML}{ECECEC} % цвет сетки
\pgfplotsset{
every axis legend/.append style = {at = {(0.5, -0.13)}, anchor = north, legend cell align = left},
tick label style = {font = \tiny\scriptsize},
label style = {font = \scriptsize},
legend style = {font = \scriptsize},
grid = both,
minor tick num = 2,
major grid style = {plotgrid},
minor grid style = {plotgrid},
axis lines = left,
legend style = {draw = none},
/pgf/number format/.cd,
1000 sep = {}
}
% Карта цвета для трехмерных графиков в стиле графиков Mathcad
\pgfplotsset{
/pgfplots/colormap = {mathcad}{rgb255(0cm) = (76, 0, 128) rgb255(2cm) = (0, 14, 147) rgb255(4cm) = (0, 173, 171) rgb255(6cm) = (32, 205, 0) rgb255(8cm) = (229, 222, 0) rgb255(10cm) = (255, 13, 0)}
}
% Карта цвета для трехмерных графиков в стиле графиков Matlab
\pgfplotsset{
/pgfplots/colormap = {matlab}{rgb255(0cm) = (0, 0, 128) rgb255(1cm) = (0, 0, 255) rgb255(3cm) = (0, 255, 255) rgb255(5cm) = (255, 255, 0) rgb255(7cm) = (255, 0, 0) rgb255(8cm) = (128, 0, 0)}
}
\begin{document}
% Вывод графика
\begin{figure} [H]
\centering
{
\begin{tikzpicture}
\begin{axis}[
xlabel = {$x$},
ylabel = {$y$},
zlabel = {$f(x, y) = x \cdot y$},
height = 12cm,
width = 12cm,
z buffer = sort,
colormap name = mathcad,
]
\addplot3[only marks, scatter] coordinates {
(0, 0, -0.985379) (0, 1, -5.50572) (0, 2, -7.74578) (0, 3, -4.00693) (0, 4, -0.530504) (1, 0, -5.50572) (1, 1, -30.7627) (1, 2, -43.2789) (1, 3, -22.3884) (1, 4, -2.96415) (2, 0, -7.74578) (2, 1, -43.2789) (2, 2, -60.8873) (2, 3, -31.4973) (2, 4, -4.17014) (3, 0, -4.00693) (3, 1, -22.3884) (3, 2, -31.4973) (3, 3, -16.2937) (3, 4, -2.15723) (4, 0, -0.530504) (4, 1, -2.96415) (4, 2, -4.17014) (4, 3, -2.15723) (4, 4, -0.28561)
};
\end{axis}
\end{tikzpicture}
}
\caption{Прочность металлоизделий}\label{ChartsAjFkQrR}
\end{figure}
\end{document}
Получим это:

Рисунок 1 — Точечный график
Для кода:
\documentclass[a4paper, 12pt]{report}
%%% Кодировки и шрифты %%%
\usepackage[T2A]{fontenc} % Поддержка русских букв
\usepackage[utf8]{inputenc} % Кодировка utf8
\usepackage[english, russian]{babel} % Языки: русский, английский
%%% Цвета %%%
\usepackage[usenames]{color}
\usepackage{color}
%%% Рисование графиков %%%
\usepackage{pgfplots}
\usepackage{float}
\definecolor{plotgrid}{HTML}{ECECEC} % цвет сетки
\pgfplotsset{
every axis legend/.append style = {at = {(0.5, -0.13)}, anchor = north, legend cell align = left},
tick label style = {font = \tiny\scriptsize},
label style = {font = \scriptsize},
legend style = {font = \scriptsize},
grid = both,
minor tick num = 2,
major grid style = {plotgrid},
minor grid style = {plotgrid},
axis lines = left,
legend style = {draw = none},
/pgf/number format/.cd,
1000 sep = {}
}
% Карта цвета для трехмерных графиков в стиле графиков Mathcad
\pgfplotsset{
/pgfplots/colormap = {mathcad}{rgb255(0cm) = (76, 0, 128) rgb255(2cm) = (0, 14, 147) rgb255(4cm) = (0, 173, 171) rgb255(6cm) = (32, 205, 0) rgb255(8cm) = (229, 222, 0) rgb255(10cm) = (255, 13, 0)}
}
% Карта цвета для трехмерных графиков в стиле графиков Matlab
\pgfplotsset{
/pgfplots/colormap = {matlab}{rgb255(0cm) = (0, 0, 128) rgb255(1cm) = (0, 0, 255) rgb255(3cm) = (0, 255, 255) rgb255(5cm) = (255, 255, 0) rgb255(7cm) = (255, 0, 0) rgb255(8cm) = (128, 0, 0)}
}
\begin{document}
% Вывод графика
\begin{figure} [H]
\centering
{
\begin{tikzpicture}
\begin{axis}[
xlabel = {$x$},
ylabel = {$y$},
zlabel = {$f(x, y) = x \cdot y$},
height = 12cm,
width = 12cm,
z buffer = sort,
colorbar,
colorbar style = {axis lines = box},
colormap name = mathcad,
view/h = 25, %25
view/v = 30, %30
]
\addplot3[surf, shader = interp, mesh/cols = 5, opacity = 1.0] coordinates {
(0, 0, -0.985379) (0, 1, -5.50572) (0, 2, -7.74578) (0, 3, -4.00693) (0, 4, -0.530504) (1, 0, -5.50572) (1, 1, -30.7627) (1, 2, -43.2789) (1, 3, -22.3884) (1, 4, -2.96415) (2, 0, -7.74578) (2, 1, -43.2789) (2, 2, -60.8873) (2, 3, -31.4973) (2, 4, -4.17014) (3, 0, -4.00693) (3, 1, -22.3884) (3, 2, -31.4973) (3, 3, -16.2937) (3, 4, -2.15723) (4, 0, -0.530504) (4, 1, -2.96415) (4, 2, -4.17014) (4, 3, -2.15723) (4, 4, -0.28561)
};
\end{axis}
\end{tikzpicture}
}
\caption{Прочность металлоизделий}\label{ChartsAjFkQrR2}
\end{figure}
\
\end{document}
Получим вот это:

Рисунок 2 — График поверхности
Для кода:
\documentclass[a4paper, 12pt]{report}
%%% Кодировки и шрифты %%%
\usepackage[T2A]{fontenc} % Поддержка русских букв
\usepackage[utf8]{inputenc} % Кодировка utf8
\usepackage[english, russian]{babel} % Языки: русский, английский
%%% Цвета %%%
\usepackage[usenames]{color}
\usepackage{color}
%%% Рисование графиков %%%
\usepackage{pgfplots}
\usepackage{float}
\definecolor{plotgrid}{HTML}{ECECEC} % цвет сетки
\pgfplotsset{
every axis legend/.append style = {at = {(0.5, -0.13)}, anchor = north, legend cell align = left},
tick label style = {font = \tiny\scriptsize},
label style = {font = \scriptsize},
legend style = {font = \scriptsize},
grid = both,
minor tick num = 2,
major grid style = {plotgrid},
minor grid style = {plotgrid},
axis lines = left,
legend style = {draw = none},
/pgf/number format/.cd,
1000 sep = {}
}
% Карта цвета для трехмерных графиков в стиле графиков Mathcad
\pgfplotsset{
/pgfplots/colormap = {mathcad}{rgb255(0cm) = (76, 0, 128) rgb255(2cm) = (0, 14, 147) rgb255(4cm) = (0, 173, 171) rgb255(6cm) = (32, 205, 0) rgb255(8cm) = (229, 222, 0) rgb255(10cm) = (255, 13, 0)}
}
% Карта цвета для трехмерных графиков в стиле графиков Matlab
\pgfplotsset{
/pgfplots/colormap = {matlab}{rgb255(0cm) = (0, 0, 128) rgb255(1cm) = (0, 0, 255) rgb255(3cm) = (0, 255, 255) rgb255(5cm) = (255, 255, 0) rgb255(7cm) = (255, 0, 0) rgb255(8cm) = (128, 0, 0)}
}
\begin{document}
% Вывод графика
\begin{figure} [H]
\centering
{
\begin{tikzpicture}
\begin{axis}[
xlabel = {$x$},
ylabel = {$y$},
zlabel = {$f(x, y) = x \cdot y$},
height = 12cm,
width = 12cm,
z buffer = sort,
colorbar,
colorbar style = {axis lines = box},
colormap name = mathcad,
view/h = 25, %25
view/v = 30, %30
]
\addplot3[surf, shader = faceted, mesh/cols = 5, opacity = 1.0] coordinates {
(0, 0, -0.985379) (0, 1, -5.50572) (0, 2, -7.74578) (0, 3, -4.00693) (0, 4, -0.530504) (1, 0, -5.50572) (1, 1, -30.7627) (1, 2, -43.2789) (1, 3, -22.3884) (1, 4, -2.96415) (2, 0, -7.74578) (2, 1, -43.2789) (2, 2, -60.8873) (2, 3, -31.4973) (2, 4, -4.17014) (3, 0, -4.00693) (3, 1, -22.3884) (3, 2, -31.4973) (3, 3, -16.2937) (3, 4, -2.15723) (4, 0, -0.530504) (4, 1, -2.96415) (4, 2, -4.17014) (4, 3, -2.15723) (4, 4, -0.28561)
};
\end{axis}
\end{tikzpicture}
}
\caption{Прочность металлоизделий}\label{ChartsAjFkQrR4}
\end{figure}
\end{document}
Получим:

Рисунок 3 — График поверхности низкополигональный
Для кода:
\documentclass[a4paper, 12pt]{report}
%%% Кодировки и шрифты %%%
\usepackage[T2A]{fontenc} % Поддержка русских букв
\usepackage[utf8]{inputenc} % Кодировка utf8
\usepackage[english, russian]{babel} % Языки: русский, английский
%%% Цвета %%%
\usepackage[usenames]{color}
\usepackage{color}
%%% Рисование графиков %%%
\usepackage{pgfplots}
\usepackage{float}
\definecolor{plotgrid}{HTML}{ECECEC} % цвет сетки
\pgfplotsset{
every axis legend/.append style = {at = {(0.5, -0.13)}, anchor = north, legend cell align = left},
tick label style = {font = \tiny\scriptsize},
label style = {font = \scriptsize},
legend style = {font = \scriptsize},
grid = both,
minor tick num = 2,
major grid style = {plotgrid},
minor grid style = {plotgrid},
axis lines = left,
legend style = {draw = none},
/pgf/number format/.cd,
1000 sep = {}
}
% Карта цвета для трехмерных графиков в стиле графиков Mathcad
\pgfplotsset{
/pgfplots/colormap = {mathcad}{rgb255(0cm) = (76, 0, 128) rgb255(2cm) = (0, 14, 147) rgb255(4cm) = (0, 173, 171) rgb255(6cm) = (32, 205, 0) rgb255(8cm) = (229, 222, 0) rgb255(10cm) = (255, 13, 0)}
}
% Карта цвета для трехмерных графиков в стиле графиков Matlab
\pgfplotsset{
/pgfplots/colormap = {matlab}{rgb255(0cm) = (0, 0, 128) rgb255(1cm) = (0, 0, 255) rgb255(3cm) = (0, 255, 255) rgb255(5cm) = (255, 255, 0) rgb255(7cm) = (255, 0, 0) rgb255(8cm) = (128, 0, 0)}
}
\begin{document}
% Вывод графика
\begin{figure} [H]
\centering
{
\begin{tikzpicture}
\begin{axis}[
xlabel = {$x$},
ylabel = {$y$},
zlabel = {$f(x, y) = x \cdot y$},
height = 12cm,
width = 12cm,
view = {0}{90},
z buffer = sort,
colorbar,
colorbar style = {axis lines = box},
grid = none,
colormap name = mathcad,
]
\addplot3[surf, shader = interp, mesh/cols = 5] coordinates {
(0, 0, -0.985379) (0, 1, -5.50572) (0, 2, -7.74578) (0, 3, -4.00693) (0, 4, -0.530504) (1, 0, -5.50572) (1, 1, -30.7627) (1, 2, -43.2789) (1, 3, -22.3884) (1, 4, -2.96415) (2, 0, -7.74578) (2, 1, -43.2789) (2, 2, -60.8873) (2, 3, -31.4973) (2, 4, -4.17014) (3, 0, -4.00693) (3, 1, -22.3884) (3, 2, -31.4973) (3, 3, -16.2937) (3, 4, -2.15723) (4, 0, -0.530504) (4, 1, -2.96415) (4, 2, -4.17014) (4, 3, -2.15723) (4, 4, -0.28561)
};
\end{axis}
\end{tikzpicture}
}
\caption{Прочность металлоизделий}\label{ChartsAjFkQrR3}
\end{figure}
\end{document}
Получим вот это:

Рисунок 4 — График с видом сверху
На код:
\documentclass[a4paper, 12pt]{report}
%%% Кодировки и шрифты %%%
\usepackage[T2A]{fontenc} % Поддержка русских букв
\usepackage[utf8]{inputenc} % Кодировка utf8
\usepackage[english, russian]{babel} % Языки: русский, английский
%%% Цвета %%%
\usepackage[usenames]{color}
\usepackage{color}
%%% Рисование графиков %%%
\usepackage{pgfplots}
\usepackage{float}
\definecolor{plotgrid}{HTML}{ECECEC} % цвет сетки
\pgfplotsset{
every axis legend/.append style = {at = {(0.5, -0.13)}, anchor = north, legend cell align = left},
tick label style = {font = \tiny\scriptsize},
label style = {font = \scriptsize},
legend style = {font = \scriptsize},
grid = both,
minor tick num = 2,
major grid style = {plotgrid},
minor grid style = {plotgrid},
axis lines = left,
legend style = {draw = none},
/pgf/number format/.cd,
1000 sep = {}
}
% Карта цвета для трехмерных графиков в стиле графиков Mathcad
\pgfplotsset{
/pgfplots/colormap = {mathcad}{rgb255(0cm) = (76, 0, 128) rgb255(2cm) = (0, 14, 147) rgb255(4cm) = (0, 173, 171) rgb255(6cm) = (32, 205, 0) rgb255(8cm) = (229, 222, 0) rgb255(10cm) = (255, 13, 0)}
}
% Карта цвета для трехмерных графиков в стиле графиков Matlab
\pgfplotsset{
/pgfplots/colormap = {matlab}{rgb255(0cm) = (0, 0, 128) rgb255(1cm) = (0, 0, 255) rgb255(3cm) = (0, 255, 255) rgb255(5cm) = (255, 255, 0) rgb255(7cm) = (255, 0, 0) rgb255(8cm) = (128, 0, 0)}
}
\begin{document}
% Вывод графика
\begin{figure} [H]
\centering
{
\begin{tikzpicture}
\begin{axis}[
xlabel = {$x$},
ylabel = {$y$},
zlabel = {$f(x, y) = x \cdot y$},
height = 12cm,
width = 12cm,
z buffer = sort,
colorbar,
colorbar style = {axis lines = box},
grid = none,
colormap name = matlab,
]
\addplot3[surf, shader = interp, mesh/cols = 5] coordinates {
(0, 0, -0.985379) (0, 1, -5.50572) (0, 2, -7.74578) (0, 3, -4.00693) (0, 4, -0.530504) (1, 0, -5.50572) (1, 1, -30.7627) (1, 2, -43.2789) (1, 3, -22.3884) (1, 4, -2.96415) (2, 0, -7.74578) (2, 1, -43.2789) (2, 2, -60.8873) (2, 3, -31.4973) (2, 4, -4.17014) (3, 0, -4.00693) (3, 1, -22.3884) (3, 2, -31.4973) (3, 3, -16.2937) (3, 4, -2.15723) (4, 0, -0.530504) (4, 1, -2.96415) (4, 2, -4.17014) (4, 3, -2.15723) (4, 4, -0.28561)
};
\end{axis}
\end{tikzpicture}
}
\caption{Прочность металлоизделий}\label{ChartsAjFkQrR3}
\end{figure}
\end{document}
Получим:

Рисунок 5 — График со стилем Matlab
Скриншоты более сложных примеров
Примеры от предыдущих отливаются большим количеством точек:

Рисунок 6 — Точечный график функции

Рисунок 7 — График функции в виде поверхности

Рисунок 8 — График функции в виде поверхности с сеткой

Рисунок 9 — График функции с видом сверху
Сравнение с MathCAD
Вот что мы получим в MathCAD на ту же функцию:

Рисунок 10 — График из MathCAD
А это в LaTeX получили:

Рисунок 11 — График функции в виде поверхности
Похоже же?
Пример мультипликативной потенциальной функции
Решил привести LaTeX код функции, которая приведена выше:
\documentclass[a4paper, 12pt]{report}
%%% Кодировки и шрифты %%%
\usepackage[T2A]{fontenc} % Поддержка русских букв
\usepackage[utf8]{inputenc} % Кодировка utf8
\usepackage[english, russian]{babel} % Языки: русский, английский
%%% Цвета %%%
\usepackage[usenames]{color}
\usepackage{color}
%%% Рисование графиков %%%
\usepackage{pgfplots}
\usepackage{float}
\definecolor{plotgrid}{HTML}{ECECEC} % цвет сетки
\pgfplotsset{
every axis legend/.append style = {at = {(0.5, -0.13)}, anchor = north, legend cell align = left},
tick label style = {font = \tiny\scriptsize},
label style = {font = \scriptsize},
legend style = {font = \scriptsize},
grid = both,
minor tick num = 2,
major grid style = {plotgrid},
minor grid style = {plotgrid},
axis lines = left,
legend style = {draw = none},
/pgf/number format/.cd,
1000 sep = {}
}
% Карта цвета для трехмерных графиков в стиле графиков Mathcad
\pgfplotsset{
/pgfplots/colormap = {mathcad}{rgb255(0cm) = (76, 0, 128) rgb255(2cm) = (0, 14, 147) rgb255(4cm) = (0, 173, 171) rgb255(6cm) = (32, 205, 0) rgb255(8cm) = (229, 222, 0) rgb255(10cm) = (255, 13, 0)}
}
% Карта цвета для трехмерных графиков в стиле графиков Matlab
\pgfplotsset{
/pgfplots/colormap = {matlab}{rgb255(0cm) = (0, 0, 128) rgb255(1cm) = (0, 0, 255) rgb255(3cm) = (0, 255, 255) rgb255(5cm) = (255, 255, 0) rgb255(7cm) = (255, 0, 0) rgb255(8cm) = (128, 0, 0)}
}
\begin{document}
% Вывод графика
\begin{figure} [H]
\centering
{
\begin{tikzpicture}
\begin{axis}[
xlabel = {$x$},
ylabel = {$y$},
zlabel = {$f(x, y)$},
height = 12cm,
width = 12cm,
z buffer = sort,
colormap name = mathcad,
]
\addplot3[
only marks, scatter,
shader = flat,
samples = 60,
domain = 0:4, y domain = 0:4]
{-(-(1/((x - 1)*(x - 1) + 0.2)) - (1/(2*(x - 2)*(x - 2) + 0.15)) - (1/(3*(x - 3)*(x - 3) + 0.3)))*(-(1/((y - 1)*(y - 1) + 0.2)) - (1/(2*(y - 2)*(y - 2) + 0.15)) - (1/(3*(y - 3)*(y - 3) + 0.3)))};
\end{axis}
\end{tikzpicture}
}
\caption{Мультипликативная потенциальная функция}\label{ChartsMultiplicativePotential}
\end{figure}
\end{document}

Рисунок 12 — Мультипликативная потенциальная функция