gnuplot rowstacked:行总数是100,但在图形栏上小于100

时间:2017-04-20 15:46:04

标签: gnuplot

我尝试使用带有rowstacked直方图的gnuplot表示预算。

这是我的剧本

#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部分,数据栏的高度不同。

1 个答案:

答案 0 :(得分:0)

我用

解决了所有问题
set locale 'fr_FR'
set decimalsign locale