# Drawing the Trace Determinant Diagram on LaTeX

I wonder how beautiful it would be, if we could draw the trace determinant diagram with TikZ or any other package on LaTeX. Image source

Edited: Here is my MWE:

\documentclass[10pt]{article}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows}
\usepackage{mathrsfs}
\usepackage{amssymb,fancyhdr,txfonts,pxfonts}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}[%
line cap=round,
line join=round,
>=triangle 45,
x=1.0cm,
y=1.0cm%
]

\clip(-5.8,-3.58) rectangle (5.56,5.64);
\draw [line width=1.2pt] (0.,4.68)-- (0.,-0.74);
\draw [line width=1.2pt] (-4.,0.)-- (4.3,0.);
\draw [thick, domain=-2:2] plot (\x, {\x*\x});
\draw (3.62,-0.12) node[anchor=north west] {$\mbox{tr}$};
\draw (0.18,4.78) node[anchor=north west] {$\Delta$};
\draw(0.,2.88) circle (0.3255764119219941cm);
\draw(0.,2.88) circle (0.4833218389437828cm);
\draw(0.,2.88) circle (0.6403124237432849cm);
\draw (1.,-1.)-- (-1.,-3.);
\draw (-1.,-1.)-- (1.,-3.);
\draw [dash pattern=on 2pt off 2pt] (-1.,-2.)-- (1.,-2.);
\draw [dash pattern=on 2pt off 2pt] (0.,-1.)-- (0.,-3.);
\end{tikzpicture}
\end{document}


• A tip: If you indent lines by 4 spaces, they'll be marked as a code sample. You can also highlight the code and click the "code" button (with "{}" on it). Jan 5, 2017 at 9:07
• That looks good so far. I am looking forward to see more of that :-)
– Jan
Jan 5, 2017 at 9:33

% Poincaré Diagram: Classification of Phase Portaits in the (det A,Tr A)-plane
% Author: Gernot Salzer
% Based on a drawing by Douglas R. Hundley, people.whitman.edu/~hundledr/courses/M244/Poincare.pdf
\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings,arrows}

\tikzset
{every pin/.style={pin edge={<-}}
,>=stealth
,flow/.style=
{decoration=
{markings
,mark=at position #1 with {\arrow{>}}
}
,postaction={decorate}
}
,flow/.default=0.5
}
\newcommand\inlayscale{}
\newcommand\inlaycaption[1]{{\sffamily\scriptsize#1}}
\newcommand\newinlay[4][0.18]%
{\renewcommand\inlayscale{#1}%
\newsavebox#2%
\savebox#2%
{\begin{tabular}{@{}c@{}}
#4\\[-1ex]
\inlaycaption{#3}\\[-1ex]
\end{tabular}%
}%
}
\newcommand\inlay[1]{\usebox{#1}}
\newcommand\Tr{\mathop{\mathrm{Tr}}}

{\begin{tikzpicture}[scale=\inlayscale]
\foreach \sx in {+,-}
{\draw[flow] (\sx4,0) -- (0,0);
\draw[flow] (0,0) -- (0,\sx4);
\foreach \sy in {+,-}
\foreach \a/\b/\c/\d in {2.8/0.3/0.7/0.6,3.9/0.4/1.3/1.1}
\draw[flow] (\sx\a,\sy\b)
.. controls (\sx\c,\sy\d) and (\sx\d,\sy\c)
.. (\sx\b,\sy\a);
}
\end{tikzpicture}%
}

\newinlay\sink{sink}%
{\begin{tikzpicture}[scale=\inlayscale]
\foreach \sx in {+,-}
{\draw[flow] (\sx4,0) -- (0,0);
\draw[flow] (0,\sx4) -- (0,0);
\foreach \sy in {+,-}
\foreach \a/\b in {2/1,3/0.44}
\draw[flow,domain=\sx\a:0] plot (\x, {\sy\b*\x*\x});
}
\end{tikzpicture}%
}

\newinlay\source{source}%
{\begin{tikzpicture}[scale=\inlayscale]
\foreach \sx in {+,-}
{\draw[flow] (0,0) -- (\sx4,0);
\draw[flow] (0,0) -- (0,\sx4);
\foreach \sy in {+,-}
\foreach \a/\b in {2/1,3/0.44}
\draw[flow,domain=0:\sx\a] plot (\x, {\sy\b*\x*\x});
}
\end{tikzpicture}%
}

\newinlay\stablefp{line of stable fixed points}%
{\begin{tikzpicture}[scale=\inlayscale]
\draw (-4,0) -- (4,0);
\foreach \s in {+,-}
{\draw[flow] (0,\s4) -- (0,0);
\foreach \x in {-3,-2,-1,1,2,3}
\draw[flow] (\x,\s3) -- (\x,0);
}
\end{tikzpicture}%
}

\newinlay\unstablefp{line of unstable fixed points}%
{\begin{tikzpicture}[scale=\inlayscale]
\draw (-4,0) -- (4,0);
\foreach \s in {+,-}
{\draw[flow] (0,0) -- (0,\s4);
\foreach \x in {-3,-2,-1,1,2,3}
\draw[flow] (\x,0) -- (\x,\s3);
}
\end{tikzpicture}%
}

\newinlay\spiralsink{spiral sink}%
{\begin{tikzpicture}[scale=\inlayscale]
\draw (-4,0) -- (4,0);
\draw (0,-4) -- (0,4);
\draw[samples=100,smooth,domain=27:7] plot ({\x r}: {0.005*\x*\x});
\draw[->] ({26 r}: {0.005*26*26}) -- +(0.01,-0.01);
\end{tikzpicture}%
}

\newinlay\spiralsource{spiral source}%
{\begin{tikzpicture}[scale=\inlayscale]
\draw (-4,0) -- (4,0);
\draw (0,-4) -- (0,4);
\draw [samples=100,smooth,domain=10:28] plot ({-\x r}: {0.005*\x*\x});
\draw[<-] ({-27.5 r}: {0.005*27.5*27.5}) -- +(0.01,-0.008);
\end{tikzpicture}%
}

\newinlay[0.15]\centre{center}%
{\begin{tikzpicture}[scale=\inlayscale]
\draw (-4,0) -- (4,0);
\draw (0,-4) -- (0,4);
\foreach \r in {1,2,3} \draw[flow=0.63] (\r,0) arc (0:-360:\r cm);
\end{tikzpicture}%
}

\newinlay\degensink{degenerate sink}%
{\begin{tikzpicture}[scale=\inlayscale]
\draw (0,-4) -- (0,4);
\draw[flow] (-4,0) -- (0,0);
\draw[flow] (4,0) -- (0,0);
\draw[flow] (-3.5,3.5) .. controls (4,1.5) and (4,1).. (0,0);
\draw[flow] (3.5,-3.5) .. controls (-4,-1.5) and (-4,-1) .. (0,0);
\draw[flow] (-3.5,2.5) .. controls (2,1) and (2,0.8).. (0,0);
\draw[flow] (3.5,-2.5) .. controls (-2,-1) and (-2,-0.8) .. (0,0);
\end{tikzpicture}%
}

\newinlay\degensource{degenerate source}%
{\begin{tikzpicture}[scale=\inlayscale]
\draw (0,-4) -- (0,4);
\draw[flow] (0,0) -- (-4,0);
\draw[flow] (0,0) -- (4,0);
\draw[flow] (0,0) .. controls (4,1.5) and (4,1).. (-3.5,3.5);
\draw[flow] (0,0) .. controls (-4,-1.5) and (-4,-1) .. (3.5,-3.5);
\draw[flow] (0,0) .. controls (2,1) and (2,0.8).. (-3.5,2.5);
\draw[flow] (0,0) .. controls (-2,-1) and (-2,-0.8) .. (3.5,-2.5);
\end{tikzpicture}%
}

\begin{document}
\begin{tikzpicture}[line cap=round,line join=round]
% Main diagram
\draw[line width=1pt,->] (0,-0.3) -- (0, 4.7) coordinate (+y);
\draw[line width=1pt,->] (-5,0) -- ( 5,0) coordinate (+x);
\draw[line width=1pt, domain=-4:4] plot (\x, {0.25*\x*\x});
\node at (+y) [label={[above,yshift=0.8cm]%
{\sffamily\large Poincar\'e Diagram: Classification of Phase Portaits
in the $(\det A,\Tr A)$-plane}}] {};
\node at (+x) [label={[right,yshift=-0.5ex]$\scriptstyle\Tr A$}] {};
\node at (+y) [label={[above]$\scriptstyle\det A$}] {};
\node at (-4,4) [pin={[above]$\scriptstyle\Delta=0$}] {};
\node at ( 4,4) [pin={[above,align=left]{%
$\scriptstyle\Delta=0$:\\
$\scriptstyle\det A=\frac{1}{4}(\Tr A)^2$}}] {};
% inlays
\node at (0,1.2)
[pin={[draw,right,xshift=0.3cm]\inlay\centre}] {};
\node at (0,0)
[pin={[draw,above left,align=center,xshift=-0.3cm]%
\inlaycaption{uniform}\\[-1ex]\inlaycaption{motion}}] {};
\node at (-4,1) {\inlay\sink};
\node at ( 4,1) {\inlay\source};
\node at (-3,0) [pin={[draw,below,yshift=-1cm]\inlay\stablefp}] {};
\node at  (3,0) [pin={[draw,below,yshift=-1cm]\inlay\unstablefp}] {};
\node at (-1.8,3.7) {\inlay\spiralsink};
\node at ( 1.8,3.7) {\inlay\spiralsource};
\node at (-3.5,{0.25*3.5*3.5})
[pin={[draw,left,xshift=-1.15cm,yshift=-0.3cm]\inlay\degensink}] {};
\node at ( 3.5,{0.25*3.5*3.5})
[pin={[draw,right,xshift=0.9cm,yshift=-0.3cm]\inlay\degensource}] {};
\end{tikzpicture}
\end{document}

• Very sweet! +1. Jan 6, 2017 at 13:03
• (+1) if only for the sheer number of your answers ;).
– cfr
Jan 7, 2017 at 23:21
• @cfr Thanks for the appreciation, even if it's only for the quantity :-) Initially I hoped that this could become a collaborative effort, since I didn't want to invest the time for doing everything myself; didn't work quite out, though ... Jan 8, 2017 at 18:37
• I didn't mean it was only for the quantity, but merely that the quantity alone would surely justify a vote :-). Of course, a large quantity of useless answers would not deserve a vote. Not a vote up, at any rate.
– cfr
Jan 9, 2017 at 4:17

Before posting his final winning answer, gernot had posted a number of answers, each of which represented a single graphical component of the final picture. Once posting his final answer, he deleted the component answers.

For this answer, I lifted those pieces-parts from gernot's [since deleted] components and the OP's question, to demonstrate that, once you have all the components, one can use \stackinset to overlay them on the base graph, perhaps.

His components included the tikz parts identified in the following MWE as \spiralA, \spiralB, \degensink, \degensource, \nondegensink, and \nondegensource,

\documentclass[10pt]{article}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows}
\usepackage{mathrsfs}
\usepackage{amssymb,fancyhdr,txfonts,pxfonts}
\pagestyle{empty}
\usetikzlibrary{decorations.markings}
\usepackage{stackengine}
\renewcommand\stacktype{L}
\setstackgap{L}{8pt}
\begin{document}
\savestack\mygraph{%
\begin{tikzpicture}[%
line cap=round,
line join=round,
>=triangle 45,
x=1.0cm,
y=1.0cm%
]
%
\clip(-5.8,-3.58) rectangle (5.56,5.64);
\draw [line width=1.2pt] (0.,4.68)-- (0.,-0.74);
\draw [line width=1.2pt] (-4.,0.)-- (4.3,0.);
\draw [thick, domain=-2:2] plot (\x, {\x*\x});
\draw (3.62,-0.12) node[anchor=north west] {$\mathrm{Tr}\,A$};
\draw (-.4,5.1) node[anchor=north west] {$\scriptstyle\det A$};
\draw (-2.35,4.7) node[anchor=north west] {%
\stackunder{$\scriptstyle\Delta=0$}{$\downarrow$}};
\draw (1.08,5.1) node[anchor=north west] {\ensurestackMath{\stackunder[11pt]{%
\Longstack[l]{\scriptstyle\Delta=0: \scriptstyle\det A=\frac{1}{4}(%
\mathrm{Tr}A)^2}}{\downarrow}}};
\draw (1.,-1.)-- (-1.,-3.);
\draw (-1.,-1.)-- (1.,-3.);
\draw [dash pattern=on 2pt off 2pt] (-1.,-2.)-- (1.,-2.);
\draw [dash pattern=on 2pt off 2pt] (0.,-1.)-- (0.,-3.);
\end{tikzpicture}%
}
\savestack\spiralA{%
\begin{tikzpicture}
[decoration=
{markings,
mark=at position 0.1 with {\arrow{stealth}}
}
,scale=0.5
]
\draw (-4,0) -- (4,0);
\draw (0,-4) -- (0,4);
\draw[postaction={decorate},domain=27:7,variable=\t,smooth,samples=100]
plot ({\t r}: {0.005*\t*\t});
\end{tikzpicture}%
}
\savestack\spiralB{%
\begin{tikzpicture}
[decoration=
{markings,
mark=at position 0.99 with {\arrow{stealth}}
}
,scale=0.5
]
\draw (-4,0) -- (4,0);
\draw (0,-4) -- (0,4);
\draw[postaction={decorate},domain=10:28.5,variable=\t,smooth,samples=100]
plot ({-\t r}: {0.005*\t*\t});
\end{tikzpicture}
}
\savestack\degensink{%
\begin{tikzpicture}
[decoration=
{markings,
mark=at position 0.5 with {\arrow{stealth}}
}
,scale=0.5
]
\draw (0,-4) -- (0,4);
\draw[postaction={decorate}] (-4,0) -- (0,0);
\draw[postaction={decorate}] (4,0) -- (0,0);
\draw[postaction={decorate}] (-3.5,3.5) .. controls (4,1.5) and (4,1).. (0,0);
\draw[postaction={decorate}] (3.5,-3.5) .. controls (-4,-1.5) and (-4,-1) .. (0,0);
\draw[postaction={decorate}] (-3.5,2.5) .. controls (2,1) and (2,0.8).. (0,0);
\draw[postaction={decorate}] (3.5,-2.5) .. controls (-2,-1) and (-2,-0.8) .. (0,0);
\end{tikzpicture}%
}
\savestack\degensource{%
\begin{tikzpicture}
[decoration=
{markings,
mark=at position 0.5 with {\arrow{stealth}}
}
,scale=0.5
]
\draw (0,-4) -- (0,4);
\draw[postaction={decorate}] (0,0) -- (-4,0);
\draw[postaction={decorate}] (0,0) -- (4,0);
\draw[postaction={decorate}] (0,0) .. controls (4,1.5) and (4,1).. (-3.5,3.5);
\draw[postaction={decorate}] (0,0) .. controls (-4,-1.5) and (-4,-1) .. (3.5,-3.5);
\draw[postaction={decorate}] (0,0) .. controls (2,1) and (2,0.8).. (-3.5,2.5);
\draw[postaction={decorate}] (0,0) .. controls (-2,-1) and (-2,-0.8) .. (3.5,-2.5);
\end{tikzpicture}%
}
\savestack\nondegensink{%
\begin{tikzpicture}
[decoration=
{markings,
mark=at position 0.5 with {\arrow{stealth}}
}
,scale=0.5
,plotsettings/.style={postaction={decorate}}
]
\draw[postaction={decorate}] (0,-4) -- (0,0);
\draw[postaction={decorate}] (0,4) -- (0,0);
\draw[postaction={decorate}] (-4,0) -- (0,0);
\draw[postaction={decorate}] (4,0) -- (0,0);
\draw [plotsettings,domain=-2:0] plot (\x, {\x*\x});
\draw [plotsettings,domain= 0:2] plot (\x, {\x*\x});
\draw [plotsettings,domain=-2:0] plot (\x, {-\x*\x});
\draw [plotsettings,domain= 0:2] plot (\x, {-\x*\x});
\draw [plotsettings,domain=-3:0] plot (\x, {0.44*\x*\x});
\draw [plotsettings,domain= 0:3] plot (\x, {0.44*\x*\x});
\draw [plotsettings,domain=-3:0] plot (\x, {-0.44*\x*\x});
\draw [plotsettings,domain= 0:3] plot (\x, {-0.44*\x*\x});
\end{tikzpicture}%
}
\savestack\nondegensource{%
\begin{tikzpicture}
[decoration=
{markings,
mark=at position 0.5 with {\arrow{stealth}}
}
,scale=0.5
,plotsettings/.style={postaction={decorate}}
]
\draw[postaction={decorate}] (0,0) -- (-4,0);
\draw[postaction={decorate}] (0,0) -- (4,0);
\draw[postaction={decorate}] (0,0) -- (0,-4);
\draw[postaction={decorate}] (0,0) -- (0,4);
\draw [plotsettings,domain=0:-2] plot (\x, {\x*\x});
\draw [plotsettings,domain=2: 0] plot (\x, {\x*\x});
\draw [plotsettings,domain=0:-2] plot (\x, {-\x*\x});
\draw [plotsettings,domain=2: 0] plot (\x, {-\x*\x});
\draw [plotsettings,domain=0:-3] plot (\x, {0.44*\x*\x});
\draw [plotsettings,domain=3: 0] plot (\x, {0.44*\x*\x});
\draw [plotsettings,domain=0:-3] plot (\x, {-0.44*\x*\x});
\draw [plotsettings,domain=3: 0] plot (\x, {-0.44*\x*\x});
\end{tikzpicture}%
}
\stackinset{c}{-55pt}{c}{2pt}{\stackunder[24pt]{$\vcenter{\hbox{\scalebox{.3}{% \nondegensink}}}$}{\scriptsize\Longunderstack[l]{sink}}%
}{%
\stackinset{c}{60pt}{c}{2pt}{\stackunder[24pt]{$\vcenter{\hbox{\scalebox{.3}{% \nondegensource}}}$}{\scriptsize\Longunderstack[l]{source}}%
}{%
\stackinset{c}{-71pt}{c}{56pt}{\stackunder[24pt]{$\vcenter{\hbox{\scalebox{.3}{% \fbox{\degensink}}}}$}{\scriptsize\Longunderstack[l]{degenerate sink}}%
$\!\rightarrow$}{%
\stackinset{c}{78pt}{c}{56pt}{$\leftarrow\!$%
\stackunder[24pt]{$\vcenter{\hbox{\scalebox{.3}{% \fbox{\degensink}}}}$}{\scriptsize\Longunderstack[r]{degenerate source}}%
}{%
\stackinset{c}{-20pt}{c}{62pt}{\stackunder{\scalebox{.35}{\spiralA}}{%
\scriptsize spiral sink}}{%
\stackinset{c}{27pt}{c}{62pt}{\stackunder{\scalebox{.35}{\spiralB}}{%
\scriptsize spiral source}}{%
\mygraph%
}}}}}}
\end{document}


• Excellent Steven. Many compliments. Jan 5, 2017 at 17:12
• Thanks. Can't upvote again, though :(.
– cfr
Jan 8, 2017 at 0:34
• +1 Impressive demonstration of your package; helps me to remember it for the next time I need something like this. But I'm not sure whether this particular task is an ideal application: your stacked approach is at least one level lower in the abstraction hierarchy than annotating the base graph with pins and labels. Jan 8, 2017 at 18:46