Hisztogram Gnuplot keverési Clustered / Stacked

szavazat
0

Van egy csoport, amely hisztogram 4 oszlopokat. Szeretném fürtözött őket párban, hogy a két csoport fürtözött készült két egymásra oszlopok.

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

az én „adatok” fájlt a következő módon szerveződik

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

Kaptam csak egy egyszerű rakott diagram az összes oszlopot elválasztva egymástól

írja

A kérdést 02/12/2019 23:52
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

A következő lehet a kiindulási pont a további csípés. Próbáltam tartani az általános, oly módon, hogy könnyedén hozzá több oszlopok vagy sorok.

A kódban akkor összegezve az oszlop értékeit „kézzel” $2+$3+$4. Vannak természetesen módon összefoglalni oszlopok „automatikusan”. De én megengedtem magamnak, hogy ültessék át az adatokat, mert úgy találtam, hogy könnyebb. Hadd tudja, ha tud élni vele. Mivel Gnuplot nincs transzponálás funkciót, akkor sem kell, hogy végre magad, vagy használja a külső szoftver. Az utóbbi, azt általában igyekeznek elkerülni, mert a platform-függetlenség. Azt hiszem, van is egy módja annak, hogy ugyanazt a telek az eredeti adatokat.

Én inkább a rajzoló stílus with boxxyerrorhelyett with boxes, amely mindig nullától kezdve. Valójában ez utóbbi cselekmény parancs rajzoló semmit, hanem csak egyre valahogy a legenda. Ez még mindig elmarad az optimálistól. Egy további nyilatkozatot lehetne kiegészíteni, amely megmondja, hogy melyik stack Data1 és amely Data2.

Kód:

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

Eredmény:

írja kép leírása itt

Válaszolt 05/12/2019 17:58
a forrás felhasználó

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