Latex で MATLAB プロットを描画する

Latex で MATLAB プロットを描画する

MATLAB には 2D と 3D の図がいくつかあります。以下は同じ種類の 2 つのサンプルです。

ここに画像の説明を入力してください

そして

ここに画像の説明を入力してください

これらの図を 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{図}

以下に例を示します (loglog凡例、注釈、個々のシンボルを含むプロット)。

凡例と個々のシンボルと注釈が付いた Matlab の loglog プロット

答え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}

ここに画像の説明を入力してください

関連情報