Istogramma Gnuplot miscelazione cluster / Stacked

voti
0

Ho un istogramma consisiting in 4 colonne. Desidero loro raggruppati in coppie di avere due gruppi cluster costituito da due colonne impilate.

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

con organizzato il mio file 'data' come segue

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

Ho ottenuto solo un semplice diagramma impilato con tutte le colonne separate da ogni altra

entrare

È pubblicato 02/12/2019 alle 23:52
fonte dall'utente
In altre lingue...                            


1 risposte

voti
0

Quanto segue potrebbe essere un punto di partenza per ulteriori modifiche. Ho cercato di tenerlo in generale, in modo tale che si possono facilmente aggiungere più colonne o righe.

Nel codice si sta sommando i valori delle colonne "manualmente" $2+$3+$4. Ci sono certamente modi per riassumere le colonne "automaticamente". Ma, mi sono permesso di recepire i dati, perché ho trovato più facile. Fatemi sapere se si può vivere con esso. Dal momento che gnuplot non ha alcuna funzione di trasposizione, si hanno o implementare da soli o utilizzare software esterni. Quest'ultimo, di solito cerco di evitare a causa della piattaforma indipendenza. Credo che ci sia anche un modo per fare la stessa trama di dati originali.

Io preferisco lo stile tracciando with boxxyerrorinvece with boxesche è sempre partendo da zero. In realtà, l'ultimo comando trama è tramando nulla, ma solo ottenere in qualche modo la leggenda. Questo è ancora ottimale. Una dichiarazione supplementare potrebbe essere aggiunto che ti dice che stack è Data1 e Data2 che è.

Codice:

### 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

Risultato:

entrare descrizione dell'immagine qui

Risposto il 05/12/2019 a 17:58
fonte dall'utente

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