-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"
私が手をプロットするために、次のコマンドを使用します。次のもの:
私が説明するトラブルを持っているいくつかの奇妙さがあります。 データの合計が常に100であるにもかかわらず、バーは100に達しません。さらに、Investissementセクションでは、バーの高さが異なります。
を使用してすべてのものを解決しました。代わりに、私の価値観では問題を解決します。質問は私のロケール "fr"で動作させる方法です – meaulnes