Domaine public 🅭

CMS minimal
ecrit avec VI

[ /  ^ < ]

Graphviz

visualise des graphes

doc       17/07/2020
macro processeur m4      11/10/2021
exemple       02/03/2025
pb convertion       12/03/2019
plan du site      19/10/2021
texte       29/06/2025

# dot est à la fois un langage et la plus utilisée
# on peut choisir la forme des noeuds
http://www.graphviz.org/doc/info/shapes.html

# quand les noeuds contienne beaucoup de data, pour éviter de répéter ( en se trompant )
dot -Tx11 << FIN
digraph {
	CNX [label="connexions\n · uid\n · rang\n · application\n · compte"]
	CPT [label="comptes\n · login\n · serveur"]
	APP [label="applications\n · libellé"]
	SRV [label="serveurs\n · host"]
	CPT -> SRV
	CNX -> { APP CPT }
   }
FIN

# installation
sudo apt-get install graphviz

# exemples hierarchique avec liens orientés pour constituer un fichier PNG:
dot -Tpng <<< "digraph { a->b->c a->d }" | display -
# liens non orientés affiché directement au terminal X
echo "graph {$(for i in {0..8}; do for j in {0..8}; do test $i -gt $j && echo "$i -- $j"; done; done)}" | circo -Tx11
# on peut lister tout le monde pour verifier que personne n'est oublié
dot -Tx11 <<< "graph { a b c d a--b--c }"
# il faut souvent des cotes car de nombreux carctères bloquent : - / . ...
dot -Tx11 <<< "digraph { \"ça\ncommence...\"->\"c'est fini.\" }"



#!/bin/sh # affiche un graphe de la sous arborescence ( à ne pas lancer trop haut ) # au debut de la directive digraph l'option rankdir=LR demande un graphique vertical # fonction recursive boucle () { echo " \"$(basename "$PWD")\" -> {" for i in * ; do echo "\"$i\"" test -d "$i" && ( cd "$i"; boucle; cd .. ) done echo "}" } (echo 'digraph { rankdir=LR; '; boucle; echo '}') | dot -Tx11 # autre presentation (echo 'digraph { '; boucle; echo '}') | sfdp -Tx11
exemple en PHP ** SANS CRÉER DE FICHIER SUR LE SERVEUR **
Méthane CH4 circo -Tx11 <<< 'graph { label=méthane C--H C--H2 C--H3 C--H4 H2[label=H] H3[label=H] H4[label=H] }' l'ordrecompte : circo -Tx11 <<< 'graph { label="méthane mal présenté" H--C H2--C H3--C H4--C H2[label=H] H3[label=H] H4[label=H]}' Benzène C6H6 echo "graph { 0--1 2--3 4--5 $(for i in {0..11}; do echo $i -- $((($i + 1) % 6));done;for i in {0..5}; do echo $i[label=C]; done; for i in {6..11}; do echo $i[label=H]; done) }" | circo -Tx11 # essayer toutes les presentations possibles: for i in dot neato twopi circo fdp sfdp patchwork osage; do echo "graph { label=$i 0--1 2--3 4--5 $(for i in {0..11}; do echo $i -- $((($i + 1) % 6));done;for i in {0..5}; do echo $i[label=C]; done; for i in {6..11}; do echo $i[label=H]; done) }" | $i -Tx11 & done visu

# problèmes de convertion

il arrive que certains systèmes ne gèrent pas tous les formats de fichier
il faut utiliser la fonction "convert" d'"ImageMagick"
pour forcer la sortie
dot -Teps | convert - png:- > fichier.png

#!  /bin/bash
#affiche un plan du site
# avec les icones
# rendu image ou cliquable
boucle() {
echo "\"$(basename $1)\" -> {"
for i in *
do
	if test -f "$i/$i.png"
	      then
		      echo "\"$i\""
		      echo "\"$i\"[shape="folder" image=\"$1/$i/$i.png\", label=\"\" href=\"http://www.memoperso.fr/$1/$i\"];"
		      cd $i
		      boucle $1/$i
		      cd ..
	      fi
done
echo "}"
}

(echo "digraph { label=\"plan du site\" labelloc=t fontsize=150 \".\"[fontsize=150 label=\"memoperso.fr\"]"; boucle .; echo "}") | fdp -Tx11


# idem en mode texte ascii graph-easy
$ sudo apt install libgraph-easy-perl

$ echo "[ A ] -- car --> [ B ],[ C ] -- car --> [ D ],[ E ]" | graph-easy


  +-----------------------+
  |                       |
  |     +------+  car   +---+  car   +---+
  |     |  A   | -----> | B | -----> | D |
  |     +------+        +---+        +---+
  |       |                            ^
  |       | car                        |
  |       v                            |
  | car +------+  car                  |
  |     |  C   | ----------------------+
  |     +------+
  |       |
  |       | car
  |       v
  |     +------+
  +---> |  E   |
        +------+

ƒraηcois✉memoρersο.ƒr