在 Latex 中繪製 MATLAB 繪圖

在 Latex 中繪製 MATLAB 繪圖

我在 MATLAB 中有一些 2D 和 3D 圖形。以下是兩個同類樣本 -

在此輸入影像描述

在此輸入影像描述

如何將這些數字包含在 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}

\結束{圖}

這是一個範例(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}

在此輸入影像描述

相關內容