Intermediate TikZ
Learning Objectives:
Intermediate techniques of TikZ:
- Tree
- Grouping
- Plotting
- Calculate Coordinates
- For loop
Tree
General Tree
\begin{tikzpicture}
\node(0){a}
child{node{b}}
child{node{c}
child{node{d}}
child{node{e}}
};
\end{tikzpicture}
Game Tree
Since nodes in game trees are often defined by dots, we need to specify them.
\begin{tikzpicture}
\tikzstyle{hollow node}=[circle,draw,inner sep=1.5]
\tikzstyle{solid node}=[circle,draw,inner sep=1.5,fill=black]
\node[hollow node]{}
child{node[solid node]{}}
child{node[solid node]{}}
child{node[solid node]{}}
;
\end{tikzpicture}
Grouping
We can apply decoration to multiple lines.
Scope
Using scope is to allow decorations to be applied to multiple lines.
\begin{tikzpicture}
\begin{scope} [red, thick]
\draw (0,0)--(3,3);
\draw (0,3)--(3,0);
\end{scope}
\end{tikzpicture}
Style
Using style is to allow decorations to be applied with flexibility:
\begin{tikzpicture}[marked/.style = {red, very thick}]
\draw[marked] (0,0)--(3,3);
\draw[marked] (0,3)--(3,0);
\end{tikzpicture}
tikzset
Using style is to allow decorations to be applied to multiple figures.
\tikzset[marked/.style = {red, very thick}]
\tikzset[trivial/.style = {blue, thin}]
\begin{tikzpicture}
\draw[marked] (0,0)--(3,3);
\draw[trivial] (0,3)--(3,0);
\end{tikzpicture}
Plotting
Mathematical Expression
\begin{tikzpicture}
\draw[blue,<->] (4,0) -| (0,4);
\draw[red, domain=0:2] plot (\x,\x*\x);
\end{tikzpicture}
Data plot
For data plot, we need to load the package \usepackage{pgfplots}
.
\usepackage{tikz}
\usepackage{pgfplots}
\begin{tikzpicture}
\begin{axis}[xlabel=x,ylabel=y]
\addplot coordinates {(1,1) (2,0) (3,3) (4,2)};
\end{axis}
Scale
Zoom out
We can use scale=0.5
to make the zoom out.
\begin{tikzpicture}[scale=0.5]
\draw (0,0)--(1,1);
\draw (0,1)--(1,0);
\end{tikzpicture}
Zoom in
We can use scale=2
to make the zoom in.
\begin{tikzpicture}[scale=2]
\draw (0,0)--(1,1);
\draw (0,1)--(1,0);
\end{tikzpicture}
Find coordinates
Grid
One of the main difficulties in using TikZ to draw diagram is to find the appropriate coordinates. One way to see where is should put the coordinate is by using grid
\begin{tikzpicture}
\draw[step=1,gray,very thin] (0,0) grid (4,4);
\end{tikzpicture}
Relative to two points
To calculate new coordinates based on $(a,b)$ and $(c,d)$, we can use |-
and -|
. We have $(a,d)$ if we have (a,b|-c,d)
and $(c,b)$ if we have (a,b-|c,d)
\begin{tikzpicture}
\node[circle, fill=red] at (1,1) {};
\node[circle, fill=blue] at (3,3){};
\node[circle, fill=green] at (1,1|- 3,3){};
\node[circle, fill=purple] at (1,1-| 3,3){};
\end{tikzpicture}
Average of two points
To calculate mid point of based on $(a,b)$ and $(c,d)$, we can use ($(a,b)!0.5!(c,d)$)
.
\begin{tikzpicture}
\node[circle, fill=red] at (1,1) {};
\node[circle, fill=blue] at (3,3){};
\node[circle, fill=green] at ($(1,1)!0.5!(3,3)$){};
\node[circle, fill=purple] at ($(1,1)!0.25!(3,3)$){};
\end{tikzpicture}
Intersection of two named paths
To calculate in intersections, we need to use \usetikzlibrary{intersections}
.
\usetikzlibrary{intersections}
\begin{tikzpicture}
\draw[name path=Demand] (0,3) -- (3,0);
\draw[name path=Supply] (0,0) -- (3,3);
\path [name intersections={of=Demand and Supply,by=E}];
\fill [red] (E) circle (2pt);
\end{tikzpicture}
Multiple intersections of two named paths
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{tikzpicture}
\draw[name path=circle] (0,0) circle (2);
\draw[name path=line] (-3,-3) -- (3,3);
\fill [red, name intersections={of = circle and line}] (intersection-1) circle (4pt);
\fill [blue, name intersections={of =circle and line}] (intersection-2) circle (4pt);
\end{tikzpicture}
Example: Demand and Supply
We illustrate how to draw demand and supply curve using the techniques presented above:
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\begin{tikzpicture}[scale=0.8]
\draw [thick](0,6) node [left] {P} |- (6,0) node [below] {Q};
\draw[thick,blue!90, name path =Supply](1,1)--(5,5) node[right]{Supply};
\draw[thick,blue!90, name path=Demand](1,5)--(5,1) node[right]{Demand};
\path [name intersections={of=Demand and Supply,by=E}];
\draw[dashed] (E -| 0,0) node[left]{$P^*$}--(E)--(E |- 0,0) node[below]{$Q^*$};
\draw[black,fill] (E) circle [radius=0.15];
\end{tikzpicture}
Programming
For Loop
The syntax to write a for loop is \foreach
and variable would be \x
.
\draw (0,0)--(6,0);
\foreach \x in {0,...,6}{
\draw (\x,-1)--(\x,1);
}