[Tex/LaTex] Typesetting a directed, weighted graph with TikZ

graphstikz-pgf

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?

Best Answer

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

Related Question