2017-04-20 5 views
-1

gnuplotで行をスタックしたヒストグラムで予算を表現しようとしています。ここで gnuplot rowstacked:行の合計は常に100ですが、グラフィックバー上では100未満です。

は私のスクリプトです

#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 

予算は二つのセクションInvestissementとFonctionnementを持っていると私はセクション

call "BudgetRowStacked.gnu" "Fonctionnement" "2017" "460 000" 

call "BudgetRowStacked.gnu" "Investissement" "2017" "545 000" 

私が手をプロットするために、次のコマンドを使用します。次のもの:

enter image description here enter image description here

私が説明するトラブルを持っているいくつかの奇妙さがあります。 データの合計が常に100であるにもかかわらず、バーは100に達しません。さらに、Investissementセクションでは、バーの高さが異なります。

+0

を使用してすべてのものを解決しました。代わりに、私の価値観では問題を解決します。質問は私のロケール "fr"で動作させる方法です – meaulnes

答えて

0

私が使用して

set locale 'fr_FR' 
set decimalsign locale 
関連する問題