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} 

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


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:

enter image description here enter image description here