La passion du libre

Débuter avec gnuplot

Cliquez sur le bouton pour afficher les conseils de lecture.Cliquez à nouveau pour les masquer

Fenêtres surgissantes explicatives

Certains mots dans le texte, affichés en vert et en gras, sont précédés d'une étoile verte sur fond orange. Par exemple, ce mot : lien.

Si vous placez le pointeur de la souris sur un tel mot, une fenêtre surgissante – popup – s'ouvre alors que l'affichage du reste du documment s'atténue. Cette fenêtre contient une explication détaillée du mot en question

Une fois que vous avez pris connaissance de ce que vous affiche cette fenêtre surgissante, vous pouvez retourner à l'état normal en cliquant ailleurs dans le document.

Navigation

Pour naviguer, utilisez le menu vertical à gauche du texte. Les entrées de menu marquées d'une petite flèche vers le bas ouvrent un sous-menu lorsqu'on clique dessus.

Vous pouvez également choisir une lecture continue en cliquant sur un des liens proposés en bas de page.

Un exemple avec étiquettes et flèches

Introduction

Nous allons ici présenter un budget avec les dépenses et les recettes présentées en pourcentage et en valeurs empilées.

Plutôt que d'utiliser une légende qui reste difficile à lire si l'impression a lieu en niveaux de gris, nous allons avoir recours à des étiquettes reliées aux éléments empilés par une série de flèches.

De plus, cela nous permettra d'introduire l'utilisation des fonctions dans un script, l'utilisation des appels système ainsi que le passage de paramètres à ce script.

Donnés

Nos données sont réparties en quatre fichiers :

  • DépensesInvestissement2017.dat
  • RecettesInvestissement2017.dat
  • DépensesFonctionnement2017.dat
  • RecettesFonctionnement2017.dat

Voici comment se présente un fichier :

# "Déficit d'investissement reporté"  "Remboursement en capital de la dette" "Cautions" "Aménagement RD124" Entretien voirie 2016 Entretien voirie 2017 Conformité sécurité accessibilité Salle des associations et vestiaires "Signalétique voies" "Désamiantage destruction bâtiment"
# 39 903 26 140 400 270 000 32 000 23 520 23 160 84 876 30 000 25 000
7,32 4,80 0,07 49,54 5,87 4,32 4,25 15,57 3,67 4,59

Nous désirons empiler des pourcentages pour que les deux colonnes dépenses et recettes soient de même hauteur. Les seules valeurs du fichier se trouvent sur la dernière ligne.

La première ligne correspond aux libellés des ces valeurs et la deuxième ligne (en commentaire) à leur valeur en euros.

Tous les fichiers sont sur ce modèle.

Comme nous désirons avoir un graphique pour la section Investissement et un graphique pour la section Fonctionnement et pouvoir faire ces graphiques chaque année, nous utilisons le nom de la section et l'année en argument de l'appel du script. Le dernier argument est le montant total en euros.

Le script

Voici le script :

#Ce fichier permet de plotter les dépenses et les récettes d'une section sur une même image
#Les fichiers des données sont structurées comme suit
#Sur la première ligne qui commence par un croisillon suivi d'une espace, les textes des libellés. Les espaces à l'intérieur des libellés sont insécables
#Sur la deuxième ligne qui commence par un croisillon suivi d'une espace les valeurs en euros (il s'agit de texte libre, on peut mettre une espace entre les milliers)
#Sur la troisième ligne, les valeurs en pourcentage

#Dans un terminal, se placer dans le dossier où se trouve ce fichier, entrer la commande gnuplot
# puis au prompt de gnuplot taper : call "InvestissementRowStacked.gnu" "Fonctionnement" "2017" "545 000"

#pour saisir les valeur à la française
set locale "fr_FR"
set decimalsign locale

unset multiplot
unset ylabel
set term pngcairo size 2048,800
set output ARG1.'.png'


#Le titre est commun aux deux plots
set multiplot title "Budget primitif - ".ARG1." ".ARG2." (Total ".ARG3." €)" font 'Arial Bold,18'

#réglages communs aux deux plots
set style data histogram
set style histogram rowstacked
set boxwidth 2 absolute
set style fill solid border

#rien sur les axes
unset xtics
unset ytics

#####################################
#DÉPENSES
######################################

#place le premier plot et le limite à la moitié de la largeur
set origin 0.01,0.05
set size 0.49,0.9

#titre pour le premier plot
set title "Dépenses" font 'Arial Bold,16'

file ="Dépenses".ARG1.ARG2.".dat"
#regarde le nombre de données
#les unset sont nécessaires pour que la fonction stats fonctionne bien
unset xrange
unset yrange
stats file output
n=STATS_columns 

#à placer toujours après stats
set yrange [0:120]

#lit les valeurs de la nième ligne
getData(fName, row)=system(sprintf("sed -n -e %dp %s", row, fName))

#lit les valeurs sur la troisième ligne
values = getData(file, 3)

#lit les valeurs en euros sur la deuxième ligne
values2= getData(file, 2)

#utilise la première ligne pour les libellés 
names=system(sprintf("head -1 '%s'",file))

#calcule le point d'arrivée des flèches en ordonnées
cumul_D=0
f(x)=(cumul_D=cumul_D+x, cur_D=cumul_D-x/2., cur_D)

#supprime la légende
unset key

#plot les dépenses avec les libellés et les flèches sur la gauche

set xrange [-14:2]
plot for [C=1:n] sprintf('%s',file) u C, \
for [C=1:n] sprintf('%s',file) u (-3.8):(2+9*C):(+2.8):(f(column(C))-2-9*C) w vectors lc rgb('black'), \
for [C=1:n] sprintf('%s',file) u (-4):(2+9*C):(word(names,C+1).' ('.word(values,C).'% | '.word(values2,C+1).' €) ') w labels right font 'Arial,15'

######################
# RECETTES
#######################

#plot les recettes avec les libellés et les flèches sur la droite

fileR ="Recettes".ARG1.ARG2.".dat"

#regarde le nombre de données
#les unset sont nécessaires pour que la fonction stats fonctionne bien
unset yrange
unset xrange
stats fileR output
n=STATS_columns 

#toujours après stats
set yrange [0:120]
set xrange [-2:14]

set title "Recettes" font 'Arial Bold,16'

#lit les valeurs en pourcentage dans la troisième ligne du fichier
values = getData(fileR, 3)

#lit les valeurs en euros sur la deuxième ligne du fichier
values2=getData(fileR, 2)

#utilise la première ligne pour les libellés
names=system(sprintf("head -1 '%s'",fileR))

#place le deuxième plot dans la seconde moitié en largeur du canvas
set origin 0.5,0.05
set size 0.49,0.9

#réinitialise le calcul des points d'arrivée des flèches de libellé
cumul_D=0

#plot les recettes avec les flèches et les libellés à droite
plot for [C=1:n] sprintf('%s',fileR) u C, \
for [C=1:n] sprintf('%s',fileR) u (3.8):(2+9*C):(-2.8):(f(column(C))-2-9*C) w vectors lc rgb('black'), \
for [C=1:n] sprintf('%s',fileR) u (4):(2+9*C):('('.word(values,C).'% | '.word(values2,C+1).' €) '.word(names,C+1)) w labels left font 'Arial,15'

unset multiplot; set output

Appel du script

Pour appeler le script avec des arguments nous n'utiliserons par la commande load mais la commande call :

gnuplot> call "BudgetRowStacked.gnu" "Investissement" "2017" "545000"

Le résultat est le suivant :

Investissement.jpg