Histogramme Gnuplot mélange en cluster / Stacked

voix
0

J'ai un histogramme consisiting dans 4 colonnes. Je voudrais les clusters à deux pour avoir deux clusters groupe constitué de deux colonnes empilées.

set terminal epslatex standalone color size 4.0in,3.0in background rgb white
set output 'hist.tex'
set boxwidth 0.5 absolute
unset key
set style fill  solid 1.00 border lt -1
set style increment default
set style histogram rowstacked title textcolor lt -1
set style data histograms
set yran [0:10]
plot for [COL=2:4] 'data' using COL title columnheader

avec mon dossier « données » organisé comme suit:

c1 c2 c3 c4
M1 5 1 1
M1 1 3 5
M2 1 1 1
M2 2 2 2

J'ai obtenu juste un schéma simple, empilé avec toutes les colonnes séparées par l'autre

entrez

Créé 02/12/2019 à 23:52
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Ce qui suit peut-être un point de départ pour plus de peaufinage. J'ai essayé de le garder en général, de sorte que vous pouvez facilement ajouter des colonnes ou des lignes.

Dans votre code vous Résumant les valeurs de la colonne « manuellement » $2+$3+$4. Il y a certainement des façons de résumer des colonnes « automatiquement ». Mais, je me suis permis de transposer vos données, parce que je l' ai trouvé plus facile. Faites - moi savoir si vous pouvez vivre avec elle. Étant donné que gnuplot n'a pas de fonction de transposition, vous avez soit à mettre en œuvre vous - même ou utiliser un logiciel externe. Ce dernier, je l' habitude d' essayer d'éviter en raison de la plate-forme d' indépendance. Je crois qu'il ya aussi une façon de faire la même parcelle pour vos données d' origine.

Je préfère le style de traçage au with boxxyerrorlieu de ce with boxesqui est toujours à partir de zéro. En fait, la dernière commande de complot complote rien mais juste d' obtenir en quelque sorte la légende. Ceci est encore suboptimale. On pourrait ajouter une déclaration supplémentaire qui vous indique quelle est la pile Données1 et qui est Données2.

Code:

### Histogram stacked and grouped
reset session

$Data1 <<EOD
area  "ex 1"  "ex 2"  "ex 3"
par1  0       0       0.119
par2  0.0211  0.0302  0
par3  0.0078  0.0139  0.0169
EOD

$Data2 <<EOD
nr    "ex 1"  "ex 2"  "ex 3"
par1  0       0       0.211
par2  0.0233  0.0302  0
par3  0.0083  0.0151  0.0173
EOD

set key top left
set style fill solid border -1

Cols = 3
Groups = 2
GroupGap = 0.2
BoxScale = 0.9
BoxWidth = (1.0-GroupGap)/Groups
Offset(g,i) = i-1.5+GroupGap/2.0 + BoxWidth/2 +(g-1)*BoxWidth

myXtic(i) = columnhead(i)
BoxL(g,i) = Offset(g,i)-BoxWidth/2.*BoxScale
BoxR(g,i) = Offset(g,i)+BoxWidth/2.*BoxScale
set xrange [0.5:Cols+0.5]

array myPalette[6] = [0xff0000, 0x00ff00, 0x0000ff, 0xffaaaa, 0xaaffaa, 0xaaaaff]
myColors(n) = myPalette[n+1+(g-1)*3]

set table $Legend
    plot $Data1 u (strcol(1)) w table
unset table

plot \
    for [i=2:Cols+1] $Data1 u (g=1,i-1):(int($0)?sum:sum=0):\
      (BoxL(g,i)):(BoxR(g,i)):(sum):(sum=sum+column(i)):(myColors($0)) \
      skip 1 w boxxy lc rgb var not, \
    for [i=2:Cols+1] $Data2 u (g=2,i-1):(int($0)?sum:sum=0):\
      (BoxL(g,i)):(BoxR(g,i)):(sum):(sum=sum+column(i)):(myColors($0)) \
      skip 1 w boxxy lc rgb var not, \
    for [i=2:|$Legend|] $Data1 u (g=1,i-1):(NaN):(myColors(i-2)): \
      xtic(columnhead(i)) w boxes lc rgb var ti word($Legend[i],1)
### end of code

Résultat:

entrez la description d'image ici

Créé 05/12/2019 à 17:58
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more