I just started doing things with TikZ today and I run into a problem: there is just no example code snippets for typesetting directed, weighted graphs. Can anyone supply one simple example in an answer?
2 Answers
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}

- 95,075
-
1It might be nice to include where these packages can be found (link) and on a personal note, is there any documentation in English? My French is not what it used to be in high school and even then it was pretty bad. Also, it may be better to add a directed example here, since the question specifically asks for it. – Roelof Spijker Dec 05 '11 at 14:26
-
TeXlive 2011, MikTeX or here http://www.ctan.org/tex-archive/macros/latex/contrib/tkz/tkz-graph. With the next version, there will be a French version. Count Zero will help me to translate ( http://tex.stackexchange.com/questions/35738/tkz-graph-inconsistency-between-edge-and-loop ). You have some examples on my site http://altermundus.com/pages/tkz/graph/index.html – Alain Matthes Dec 05 '11 at 15:49
-
That's almost what I need and I have typeset a similar undirected weighted graph using "Prim's algorithm" example from texample.net. Although, I need to include somehow a direction for each edge in the graph. Frankly, the edges should be arrows pointing from a source vertex to a destination vertex rather than simply connecting the two. – coderodde Dec 06 '11 at 11:54
-
I added an example with arrows on edges. You need to study tikz to modify sometimes the style of edges or vertices. – Alain Matthes Dec 06 '11 at 14:48
-
Thanks for your input, Altermundus, but I cannot accept your answer as I have a lot of code purely in TikZ/PGF, and, thus, cannot afford porting to tkz-graph. Frankly, I ended up using 'automata' - TikZ-library in order to draw directed, weighted graphs (one, e.g., represented by the second image in your answer). – coderodde Dec 09 '11 at 18:00
-
@user1049393 Yes I understand your point of view. I added a version of my last code written only with
tikzandautomata. – Alain Matthes Dec 10 '11 at 07:52 -
Since I just wanted something easy, here is a stripped down version using 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} % standard vertex at (0,0) with Name k
\Vertex[x=0,y=2]{F}
\Vertex[x=-1,y=4]{D}
\Vertex[x=8,y=5]{B}
\Vertex[x=9,y=2,L=$n$]{N} % custom label
\Vertex[x=5,y=0,LabelOut,Lpos=-90,Ldist=.2cm]{M} % custom label position
\Vertex[x=3,y=3.5,NoLabel]{S} % unlabeled
\tikzstyle{LabelStyle}=[sloped] % rotate labels to match edges
\Edgelabel=$120$,labelstyle={pos=0.3,above}(F) % custom label position
\Edgelabel=$490$(B)
\Edgelabel=$580$(M)
\Loopdir=NO,dist=2cm,label=b,labelstyle={auto} % loop/self-edge
\tikzstyle{EdgeStyle}=[pre, bend right] % set curved arrow style
\Edgelabel=$210$(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:
- 339



tkz-berge. Have a look at the rest of the site as well, many great examples. – Roelof Spijker Dec 05 '11 at 14:11tkz-berge. Perhaps it's been retired. Is Altermundus about? – qubyte Dec 05 '11 at 14:14tkz-bergeis part of TeXLive 2011 but to draw simple graph, you need onlytkz-graphtexlive/2011/texmf-dist/tex/latex/tkz-graph/tkz-graph.sty. – Alain Matthes Dec 05 '11 at 14:20tkz-bergeappears to be part of the standard distribution now. – qubyte Dec 05 '11 at 14:20