2017-04-20 2 views
-1

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

enter image description here enter image description here

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.

+0

mit Verwendung. statt, in meinen Werten löst das Problem. Die Frage ist, wie man es in meinem Locale "fr" funktioniert – meaulnes

Antwort

0

löste ich alles, was

set locale 'fr_FR' 
set decimalsign locale 
Verwandte Themen