我尝试使用带有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"
我得到以下
有些奇怪我无法解释。 尽管数据总和始终为100,但是数据总和不会达到100,而且,在Investissement部分,数据栏的高度不同。
答案 0 :(得分:0)
我用
解决了所有问题set locale 'fr_FR'
set decimalsign locale