Рисование графиков MATLAB в Latex

Рисование графиков MATLAB в Latex

У меня есть несколько 2D и 3D фигур в MATLAB. Ниже приведены два примера одного и того же рода-

введите описание изображения здесь

и

введите описание изображения здесь

Как включить эти рисунки в LaTeX? До сих пор я включал экспортированное изображение PNG, но оно не выглядит гладким при увеличении масштаба документа.

решение1

ПроверитьMatlab2TikZ. Здесь используется TikZ для генерации фигур во время компиляции.

На стороне Matlab вы используете такой код:

matlab2tikz( '/PATH/FILE.tikz','height','\figureheight','width','\figurewidth',...
'extraAxisOptions',{'tick label style={font=\footnotesize}'}, ...
'extraAxisOptions',{'y tick label style={/pgf/number format/.cd, fixed, fixed zerofill, precision=2, /tikz/.cd}'});

А на стороне LaTeX код такой:

\begin{figure}[htbp]
\centering
\setlength\figureheight{8cm}
\setlength\figurewidth{0.8\textwidth}
\input{PATH/FILE.tikz}
\caption{Caption Text.}
\label{fig:figureLabel}

\end{figure}

Вот пример ( loglogграфик с легендой, аннотациями и отдельными символами).

Логарифмический график из Matlab с легендой, индивидуальными символами и аннотациями

решение2

Хотя многие находят matlab2tikzрезультаты удовлетворительными, мне нравится возможность использовать собственные макросы в графиках, так что если мои обозначения изменятся, весь документ, включая графики, обновится сам. Таким образом, я почти всегда последовательна в своей работе.

Написание графиков вручную с использованием родного языкаpgfplotsтакже производит более чистый, легко модифицируемый и более компактный код, чем автоматически сгенерированные методы. Есть небольшая кривая обучения, но я считаю, что инвестиции в обучение того стоят.

У меня просто есть MATLAB или любой другой код обработки чисел, который выводит сырые .datфайлы и pgfplotsсчитывает данные из них. Так что если я снова запускаю свой код, а затем снова компилирую свой документ, результаты автоматически обновляются.

У меня не было ваших данных рассеяния, поэтому я создал некоторые "фиктивные данные" с использованием функций и случайных чисел для первого графика. Я прокомментировал каждый вариант, чтобы вы могли видеть, откуда берется каждый элемент графика.pgfplotsдокументацияявляется одним из лучших в отрасли, и вы можете найти там более подробную информацию обо всех вариантах.

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
  only marks,                    % no lines
  xmin=0, xmax=200,              % x-axis limits
  ymin=0, ymax=300,              % y-axis limits
  xlabel={Dissimilarities},      % x-axis label
  ylabel={Distances},            % y-axis label
  title={Morse Signal Analysis}, % plot title
  legend pos=north west,         % legend position on plot
  legend cell align=left,        % text alignment within legend
  domain=20:180,                 % domain for plotted functions (not needed for scatter data)
  samples=200,                   % plot 200 samples
]
  \addplot[mark=o,blue] {x^2/200 + rand*x/3}; % add the first plot
  \addlegendentry{Stress}; % add the first plot's legend entry
  \addplot[mark=+,red]  {x^2/200 + rand*x/2}; % ...
  \addlegendentry{Sammon Mapping};
  \addplot[mark=triangle,green] {x^2/200 + rand*x/1.5};
  \addlegendentry{Squared Stress};
\end{axis}
\end{tikzpicture}

\bigskip
\begin{tikzpicture}
\begin{axis}[
  grid=major,              % draw major gridlines
  major grid style=dotted, % dotted grid lines
  colormap/jet,            % colormap from MATLAB
  samples=30,              % 30 samples in each direction
  view={140}{30},          % configure plot view
  domain=-3:3,             % x varies from -3 to 3
  y domain=-3:3,           % y varies from -3 to 3
  zmin=-10, zmax=10,       % z-axis limits
  xlabel={$x$},            % x-axis label
  xtick={-3,-2,...,3},     % integer-spaced tick marks on the x-axis
  ylabel={$y$},            % y-axis label
  title={$y^2 - x^2$},     % plot title
]
  \addplot3[mesh] {y^2-x^2}; % make the mesh plot
\end{axis}
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Связанный контент