Typesetting a directed, weighted graph with TikZ
I made tkz-graph
and tkz-berge
to help beginners to draw some graphs. tkz-berge
is used for specials graphs (named graphs in graph theory)
You can use only tikz
to draw graphs.
Version with tkz-graph
\documentclass[]{article}
\usepackage[utf8]{inputenc}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{fullpage}
\usepackage[upright]{fourier}
\usepackage{tkz-graph}
\usetikzlibrary{arrows}
\thispagestyle{empty}
\begin{document}
\SetVertexNormal[Shape = circle,
FillColor = orange,
LineWidth = 2pt]
\SetUpEdge[lw = 1.5pt,
color = black,
labelcolor = white,
labeltext = red,
labelstyle = {sloped,draw,text=blue}]
\begin{center}
\begin{tikzpicture}
\Vertex[x=0 ,y=0]{K}
\Vertex[x=0 ,y=2]{F}
\Vertex[x=-1,y=4]{D}
\Vertex[x=3 ,y=7]{H}
\Vertex[x=8 ,y=5]{B}
\Vertex[x=9 ,y=2]{N}
\Vertex[x=5 ,y=0]{M}
\Vertex[x=3 ,y=1]{S}
\tikzset{EdgeStyle/.append style = {bend left}}
\Edge[label = $120$](K)(F)
\Edge[label = $650$](H)(S)
\Edge[label = $780$](H)(M)
\Edge[label = $490$](D)(B)
\Edge[label = $600$](D)(M)
\Edge[label = $580$](B)(M)
\Edge[label = $600$](H)(N)
\Edge[label = $490$](F)(H)
\tikzset{EdgeStyle/.append style = {bend right}}
\Edge[label = $630$](S)(B)
\Edge[label = $210$](S)(N)
\Edge[label = $230$](S)(M)
\end{tikzpicture}
\end{center}
\end{document}
With arrows on edges
\documentclass[11pt]{scrartcl}
\usepackage{tkz-graph}
\begin{document}
\begin{tikzpicture}
\SetUpEdge[lw = 1.5pt,
color = orange,
labelcolor = white]
\GraphInit[vstyle=Normal]
\SetGraphUnit{3}
\tikzset{VertexStyle/.append style={fill}}
\Vertex{P}
\NOEA(P){B} \SOEA(P){M} \NOEA(B){D}
\SOEA(B){C} \SOEA(C){L}
\tikzset{EdgeStyle/.style={->}}
\Edge[label=$3$](C)(B)
\Edge[label=$10$](D)(B)
\Edge[label=$10$](L)(M)
\Edge[label=$10$](B)(P)
\tikzset{EdgeStyle/.style={<->}}
\Edge[label=$4$](P)(M)
\Edge[label=$9$](C)(M)
\Edge[label=$4$](C)(L)
\Edge[label=$5$](C)(D)
\Edge[label=$10$](B)(M)
\tikzset{EdgeStyle/.style={<->,relative=false,in=0,out=60}}
\Edge[label=$11$](L)(D)
\end{tikzpicture}
\end{document}
update : Version with tikz
and automata
\documentclass[11pt]{scrartcl}
\PassOptionsToPackage{usenames,dvipsnames,svgnames}{xcolor}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning,automata}
\begin{document}
\begin{tikzpicture}[>=stealth',shorten >=1pt,node distance=3cm,on grid,initial/.style ={}]
\node[state] (P) {$P$};
\node[state] (B) [above right =of P] {$B$};
\node[state] (M) [below right =of P] {$M$};
\node[state] (D) [above right =of B] {$D$};
\node[state] (C) [below right =of B] {$C$};
\node[state] (L) [below right =of C] {$L$};
\tikzset{mystyle/.style={->,double=orange}}
\tikzset{every node/.style={fill=white}}
\path (C) edge [mystyle] node {$3$} (B)
(D) edge [mystyle] node {$10$} (B)
(L) edge [mystyle] node {$10$} (M)
(B) edge [mystyle] node {$10$} (P);
\tikzset{mystyle/.style={<->,double=orange}}
\path (P) edge [mystyle] node {$4$} (M)
(C) edge [mystyle] node {$9$} (M)
(C) edge [mystyle] node {$4$} (D)
(B) edge [mystyle] node {$5$} (M);
\tikzset{mystyle/.style={<->,relative=false,in=0,out=60,double=orange}}
\path (L) edge [mystyle] node {$10$} (D);
\end{tikzpicture}
\end{document}
Here is a stripped down version usking tkz-graph
of Alain Matthes's code that provides reasonable looking (math/CS paper) defaults and demonstrates some common vertex, edge, and label options.
\documentclass{article}
\usepackage{tkz-graph}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\Vertex[x=0,y=0]{K}
\Vertex[x=0,y=2]{F}
\Vertex[x=-1,y=4]{D}
\Vertex[x=3,y=7]{H}
\Vertex[x=8,y=5]{B}
\Vertex[x=9,y=2,L=$n$]{N}
\Vertex[x=5,y=0,LabelOut,Lpos=-90,Ldist=.2cm]{M}
\Vertex[x=3,y=3.5,NoLabel]{S}
\tikzstyle{LabelStyle}=[sloped]
\tikzstyle{EdgeStyle}=[]
\Edge[label=$120$,labelstyle={pos=0.3,above}](K)(F)
\Edge[label=$650$](H)(S)
\Edge[label=$780$](H)(M)
\Edge[label=$490$](D)(B)
\Edge[label=$600$](D)(M)
\Edge[label=$580$](B)(M)
\Edge[label=$600$](H)(N)
\Edge[label=$490$](F)(H)
\Loop[dir=NO,dist=2cm,label=$\beta$](B)
\tikzstyle{EdgeStyle}=[pre, bend right]
\Edge[label=$210$](S)(N)
\end{tikzpicture}
\end{figure}
\end{document}
Useful resources:
- Loops: How do you make a tkz graph with edges starting and ending at the same vertex?
- Invisible vertices: Invisible vertices with tkz-graph
- Vertex with no circle: How do I draw a graph in tikz where the vertices are only represented by the label names?
- Referencing a Vertex that has Math Typesetting inside it to make an Edge
- Fine-tuning labels with
labelstyle
(above
,sloped
,pos
, ...) Labeling Edges in a Weighted Digraph - Change bend angle and swap node position on arrow
tkz-graph's manual is in French but it contains enough English words or cognates to be decipherable. https://ctan.org/pkg/tkz-graph
tkz-graph also comes with useful built-in graph styles: