Histogram Gnuplot mieszanie klastrowanego / ułożone

głosy
0

Mam histogram consisiting w 4 kolumnach. Chciałbym skupione je w pary mają dwa klastra grupy złożonej z dwóch nałożonych colums.

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

z mój plik „dane” zorganizowana w następujący sposób

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

I otrzymuje się tylko prosty ułożone schemat wszystkich kolumn, oddzielonych wzajemnie

wprowadzić

Utwórz 02/12/2019 o 23:52
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Dodaje się może stać się punktem wyjścia dla dalszego skomplikowany. Starałem się zachować ogólny, tak że można łatwo dodać więcej kolumn lub wierszy.

W kodzie masz zsumowaniu wartości kolumny „ręcznie” $2+$3+$4. Z pewnością istnieją sposoby, aby podsumować kolumny „automatycznie”. Ale ja pozwoliłem sobie przenieść swoje dane, bo łatwiej. Daj mi znać, czy można z tym żyć. Od gnuplot ma żadnej funkcji transpozycji, to albo trzeba go realizować samodzielnie lub użyć oprogramowania zewnętrznego. Ten ostatni, ja zwykle starają się unikać ze względu na platformie niepodległości. Chyba nie jest też sposobem na ten sam wykres dla oryginalnych danych.

Wolę styl kreślenia with boxxyerrorzamiast with boxesktóra jest zawsze zaczynając od zera. Faktycznie, ostatnie polecenie plot knuje nic ale dopiero się jakoś legendę. To wciąż panującymi. Dodatkowa deklaracja może zostać dodana, która mówi ci, których stos jest Dane1 i który jest Data2.

Kod:

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

Wynik:

wprowadzić opis obrazu tutaj

Odpowiedział 05/12/2019 o 17:58
źródło użytkownik

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