Ich versuche, ein Budget mit gnuplot mit rowstacked Histogramme darzustellen.gnuplot rowstacked: Die Summe der Zeilen ist immer 100, aber auf der Grafikleiste sind weniger als 100
Hier ist mein Skript
#Ce fichier permet de plotter les dépenses et les récettes 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
#Sur la troisième ligne, le total de la section
#Sur la quatriè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"
set decimalsign ','
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,18'
#réglages communs aux deux plots
set style data histogram
set style histogram rowstacked
set boxwidth 2 absolute
set style fill solid border
#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,16'
file ="Dépenses".ARG1.ARG2.".dat"
#regarde le nombre de données
unset xrange
unset yrange
stats file output
n=STATS_columns
set yrange [0:120]
#lit les valeurs en pourcentage sur la troisième ligne du fichier
getData(fName, row)=system(sprintf("sed -n -e %dp %s", row, fName))
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,14'
######################
# 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
unset yrange
unset xrange
stats fileR output
n=STATS_columns
set yrange [0:120]
set xrange [-2:14]
set title "Recettes" font 'Arial,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,14'
unset multiplot; set output
das Budget hat zwei Abschnitte Investissement und Fonctionnement und ich verwende den folgenden Befehl, um die Abschnitte
call "BudgetRowStacked.gnu" "Fonctionnement" "2017" "460 000"
und
call "BudgetRowStacked.gnu" "Investissement" "2017" "545 000"
ich zu zeichnen bekommen die folgenden
Es gibt einige Fremdheit ich Schwierigkeiten haben, zu erklären. Die Balken erreichen nicht 100, obwohl die Summe der Daten immer 100 ist, darüber hinaus sind im Abschnitt Investissement die Balken unterschiedlich hoch.
mit Verwendung. statt, in meinen Werten löst das Problem. Die Frage ist, wie man es in meinem Locale "fr" funktioniert – meaulnes