I have been using the tikz and the standalone package. The figure are placed in separate files and \input into the main file. For example, here is the contents of file Ellpise.tex:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (EllipseOrigin) at (0,0);
\newcommand*{\XRadius}{4.0}
\newcommand*{\YRadius}{3.0}
\draw [blue, thin, ->] (-5,0) -- (5,0) node [right] {$x$};
\draw [blue, thin, ->] (0,-4) -- (0,4) node [above] {$y$};
\draw [red, ultra thick]% Graph Ellipse
(EllipseOrigin) ellipse [x radius=\XRadius,y radius=\YRadius];
\end{tikzpicture}
\end{document}
Then in the main file I have:
\documentclass{article}
\usepackage{standalone}
\usepackage{tikz}
\begin{document}
Here is the graph of an ellipse:
\input{Ellipse}
\end{document}
I keep the figures in a separate directory and can compile them separately to ensure that I get them the way I want them. There are various other options you could do to such as to place these in a Figure environment if desired.