Graphes et diagrammes avec TikZ

En écrivant le corrigé d’un exercice de probabilités, j’ai eu besoin de faire un graphe probabiliste et donc de me plonger dans la documentation de Tikz/PGF. Je reproduis ici le résultat et un code LaTeX minimal qui le produit.

graphe probabiliste

\documentclass{minimal}
  \usepackage{amsmath}
  \usepackage{tikz}
    \usetikzlibrary{arrows,automata}
\begin{document}
  \begin{tikzpicture}[scale=2.5,->,>=stealth',shorten >=1pt,auto,inner sep=2pt,semithick,bend angle=20]
    \tikzstyle{every state}=[draw=none]
    \node[state] (A) at (1,1.7321) {$A$};
    \node[state] (B) at (0,0)      {$B$};
    \node[state] (C) at (2,0)      {$C$};
    \path (A) edge [in=115,out=65,loop]       node[swap] {$1$}            (A)
              edge [bend right,looseness=0.5] node[swap] {$0$}            (B)
              edge [bend right,looseness=0.5] node[swap] {$0$}            (C)
          (B) edge [in=250,out=200,loop]      node[swap] {$\dfrac{3}{4}$} (B)
              edge [bend right,looseness=0.5] node[swap] {$\dfrac{1}{4}$} (C)
              edge [bend right,looseness=0.5] node[swap] {$0$}            (A)
          (C) edge [in=340,out=290,loop]      node[swap] {$\dfrac{1}{2}$} (C)
              edge [bend right,looseness=0.5] node[swap] {$\dfrac{1}{4}$} (B)
              edge [bend right,looseness=0.5] node[swap] {$\dfrac{1}{4}$} (A);
  \end{tikzpicture}
\end{document}

Il doit être assez facile d’adapter ce code suivant les besoins.

Pour regrouper les exemples, je donne un arbre probabiliste (qui était dans les compléments de LaTeX) :

arbre probabiliste

\documentclass{minimal}
  \usepackage{amsmath}
  \usepackage{tikz}
\begin{document}
  \begin{tikzpicture}
    \tikzstyle{level 1}=[level distance=2cm, sibling distance=2cm]
    \tikzstyle{level 2}=[level distance=2cm, sibling distance=1cm]
    \node{}[grow=right]
    child{node{$A$}
      child{node{$A\cap B$}                     edge from parent node[below]{$\frac{1}{4}$}}
      child{node{$A\cap \overline B$}           edge from parent node[above]{$\frac{3}{4}$}}
      edge from parent node[below]{$\frac{1}{5}$}}
    child{node{$\overline A$}
      child{node{$\overline A\cap B$}           edge from parent node[below]{$\frac{1}{3}$}}
      child{node{$\overline A\cap \overline B$} edge from parent node[above]{$\frac{2}{3}$}}
      edge from parent node[above]{$\frac{4}{5}$}};
\end{tikzpicture}
\end{document}

J’ai aussi eu à écrire un diagramme commutatif (ceux qui connaissent reconnaitront la propriété universelle du produit fibré ou pullback ou encore tiré en arrière) :

produit fibré

\documentclass{minimal}
  \usepackage{amsmath}
  \usepackage{tikz}
    \usetikzlibrary{matrix}
\begin{document}
  \begin{tikzpicture}
    \matrix (m) [matrix of math nodes,row sep=3em,column sep=3em] {Y & & \\ & X' & X \\ & B' & B\\};
    \path [->,>=stealth]               (m-3-2) edge node[auto]      {$c$}        (m-3-3);
    \path [->,>=stealth]               (m-2-3) edge node[auto]      {$\pi$}      (m-3-3);
    \path [->,>=stealth]               (m-2-2) edge node[right]     {$\pi'$}     (m-3-2);
    \path [->,>=stealth]               (m-2-2) edge node[below]     {$d$}        (m-2-3);
    \path [->,>=stealth,bend right=20] (m-1-1) edge node[left]      {$\pi_Y$}    (m-3-2);
    \path [->,>=stealth,bend left=20]  (m-1-1) edge node[above]     {$f$}        (m-2-3);
    \path [->,>=stealth,dotted]        (m-1-1) edge node[fill=white]{$\tilde f$} (m-2-2);
  \end{tikzpicture}
\end{document}

7 réflexions au sujet de « Graphes et diagrammes avec TikZ »

  1. Bien utile ! Je ne connaissais pas ce package. Pour les diagrammes commutatifs j’utilise jusqu’à présent le package xymatrix. Mais peut-être vais-je changer !

  2. xypic est un package spécialisé dans les diagrammes, alors que TikZ est pour le dessin en général. La documentation du premier fait une quinzaine de pages, celle du second quelques centaines !

  3. Cher Pierre,

    merci pour cette page avec de très beaux exemples en TikZ. Je voudrais moi aussi mettre sur ma page web l’image d’un diagramme fait avec TikZ, et ce que je ne sais pas faire, c’est de créer une image de taille importante, avec une belle résolution, dans un format « image » (gif, jpg, png). Je vois que tu as réussi a faire de magnifiques images en png. Comment as-tu fait ? Merci d’avance,

    cordialement,
    Matthieu

  4. Bonjour,
    Je précise que je fais ce qui suit sous Linux (mais c’est certainement possible avec un autre OS).

    Fabriquer le fichier dvi :
    latex toto.tex
    Fabriquer le fichier ps :
    dvips toto.dvi
    Jusqu’ici, tu n’as rien appris 🙂 J’utilise ensuite la commande gs (ghostscript) pour fabriquer le fichier png :
    gs -sDEVICE=png256 -sOutputFile=toto.png toto.ps
    Ceci est le code minimal. On obtient une image png de mauvaise qualité. On peut aussi obtenir une image jpg en changeant l’option sDEVICE convenablement, et pour voir tous les formats possibles :
    gs -help
    Mais ce qui répond vraiment à ta question est :
    gs -dBATCH -sDEVICE=png256 -sOutputFile=toto.png -r600 toto.ps
    Le -dBATCH ne sert à rien, à part sortir automatiquement du programme à la fin de l’opération. Jouer sur le 600 pour la qualité.
    On peut faire un script avec tout ça si on veut l’utiliser à répétition…

    Merci pour le lien vers la page web : je vais pouvoir réviser mes schémas en groupes affines, mes vieilles amours 🙂

  5. Super, merci pour ces tuyaux. Je vais faire des essais.
    Entre temps j’ai trouvé une autre solution, excellente en ce qui concerne le résultat, mais peut-être moins « puriste » : je compile avec pdflatex, je visionne le pdf, et je fais une capture d’écran ! La qualité est au rendez-vous.

  6. C’est peut être plus pratique… En tout cas, avec gs et en jouant sur le -r600, on peut fabriquer des images énormes (ok, c’est probablement inutile).

Laisser un commentaire