Ich habe einige 2D- und 3D-Figuren in MATLAB. Unten sind zwei Beispiele derselben Art:
Und
Wie füge ich diese Abbildungen in LaTeX ein? Bis jetzt füge ich das exportierte PNG-Bild ein, aber das sieht nicht flüssig aus, wenn das Dokument vergrößert wird.
Antwort1
KasseMatlab2TikZ. Dabei wird TikZ verwendet, um die Abbildungen zur Kompilierungszeit zu generieren.
Auf der Matlab-Seite verwenden Sie Code wie diesen:
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}'});
Und auf der LaTeX-Seite Code wie dieser:
\begin{figure}[htbp]
\centering
\setlength\figureheight{8cm}
\setlength\figurewidth{0.8\textwidth}
\input{PATH/FILE.tikz}
\caption{Caption Text.}
\label{fig:figureLabel}
\end{figure}
Hier ist ein Beispiel (ein loglog
Diagramm mit Legende, Anmerkungen und einzelnen Symbolen).
Antwort2
Viele sind mit den matlab2tikz
Ergebnissen zufrieden, aber ich mag die Möglichkeit, in den Diagrammen meine eigenen Makros zu verwenden, sodass sich das gesamte Dokument inklusive der Diagramme automatisch aktualisiert, wenn sich meine Notation ändert. Auf diese Weise bin ich bei meiner Arbeit fast immer konsistent.
Schreiben der Plots per Hand mit nativenpgfplots
erzeugt außerdem saubereren, leichter veränderbaren und kompakteren Code als die automatisch generierten Methoden. Es gibt eine gewisse Lernkurve, aber ich finde, dass sich die Investition in das Lernen lohnt.
Ich lasse MATLAB oder einen anderen rechenintensiven Code einfach Rohdateien ausgeben .dat
und pgfplots
lese Daten daraus. Wenn ich meinen Code also erneut ausführe und dann mein Dokument neu kompiliere, werden die Ergebnisse automatisch aktualisiert.
Ich hatte Ihre Streudaten nicht, also habe ich für das erste Diagramm einige „Dummy-Daten“ mit Funktionen und Zufallszahlen erstellt. Ich habe jede Option kommentiert, damit Sie sehen können, woher jedes Element des Diagramms stammt. Diepgfplots
Dokumentationgehört zu den Besten in der Branche und Sie können dort weitere Einzelheiten zu allen Optionen finden.
\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}