Histogram Gnuplot blanding Gruppert / stablet

stemmer
0

Jeg har et histogram consisiting i 4 kolonner. Jeg ønsker å gruppert dem i par for å ha to klynge gruppe bestående av to stablede kolonner.

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

med min 'data' fil organisert som følger

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

I oppnådd bare en enkel stablet diagram hvor alle kolonnene er adskilt med hverandre

skriv

Publisert på 02/12/2019 klokken 23:52
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Det følgende kan være et utgangspunkt for videre tilpasning. Jeg prøvde å holde det generelle, slik at du enkelt kan legge til flere kolonner eller rader.

I koden din er du summere opp kolonneverdier de "manuelt" $2+$3+$4. Det er sikkert måter å oppsummere kolonner "automatisk". Men, tillot jeg meg å transponere dine data, fordi jeg fant det lettere. La meg vite om du kan leve med det. Siden gnuplot har ingen transponere funksjon, du enten nødt til å gjennomføre det selv eller bruke ekstern programvare. Sistnevnte, jeg vanligvis prøver å unngå på grunn av plattform-uavhengighet. Jeg antar det er også en måte å gjøre det samme tomten for den opprinnelige data.

Jeg foretrekker å plotte stil with boxxyerrori stedet for with boxessom alltid starter fra null. Egentlig er den siste tomten kommandoen plotting annet enn bare å få en eller annen måte legende. Dette er fortsatt suboptimal. En tilleggserklæring kan legges som forteller deg hvilken stabel er Data1 og som er data 2.

Kode:

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

Resultat:

skriv bildebeskrivelse her

Svarte 05/12/2019 kl. 17:58
kilden bruker

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