28

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?

9
  • By the way, is there anything like that on TeXample? Dec 5, 2011 at 14:10
  • Have a look at: texample.net/tikz/examples/prims-algorithm and texample.net/tikz/examples/state-machine. The first one is not directed but can easily be made so. The second is a state machine, but replacing the edge labels should be straightforward and you obtain a directed weighted graph. And then there is: texample.net/tikz/examples/tkz-berge but I don't know the status of tkz-berge. Have a look at the rest of the site as well, many great examples. Dec 5, 2011 at 14:11
  • I couldn't seem to find anything on tkz-berge. Perhaps it's been retired. Is Altermundus about?
    – qubyte
    Dec 5, 2011 at 14:14
  • If I'm not mistaking, you could something like that in R, and include the graphic either via a pdf, or automatically via Sweave. Dec 5, 2011 at 14:16
  • Ah! Speak of the devil!
    – qubyte
    Dec 5, 2011 at 14:17

2 Answers 2

40

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} 

enter image description here

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}

enter image description here

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}

enter image description here

7
  • 1
    It 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. Dec 5, 2011 at 14:26
  • TeXlive 2011, MikTeX or here 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 ( tex.stackexchange.com/questions/35738/… ). You have some examples on my site altermundus.com/pages/tkz/graph/index.html Dec 5, 2011 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 6, 2011 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. Dec 6, 2011 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 9, 2011 at 18:00
8

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
  \Edge[label=$120$,labelstyle={pos=0.3,above}](K)(F)  % custom label position
  \Edge[label=$490$](D)(B)
  \Edge[label=$580$](B)(M)
  \Loop[dir=NO,dist=2cm,label=b,labelstyle={auto}](B) % loop/self-edge
  \tikzstyle{EdgeStyle}=[pre, bend right] % set curved arrow style
  \Edge[label=$210$](S)(N)
\end{tikzpicture}
\end{figure}

\end{document}

sample graph

Useful resources:

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:

enter image description here enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .