Гистограмма Gnuplot смешивания кластерного / STACKED

голоса
0

У меня есть гистограмму consisiting в 4 колонки. Я хотел бы кластерные их пары, чтобы иметь два кластерных группы из двух сложенных 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

с организовал мой файл «данные» следующим образом

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

Я получил только простую схему укладываются со всеми колоннами, разделенных друг от друга

введите

Задан 02/12/2019 в 23:52
источник пользователем
На других языках...                            


1 ответов

голоса
0

Следующая может быть отправной точкой для дальнейшей настройки. Я пытался держать его вообще, так что вы можете легко добавить несколько столбцов или строк.

В своем коде вы суммированием значений столбцов «вручную» $2+$3+$4. Есть , конечно , способы суммируют столбцы «автоматически». Но, я позволил себе перенести свои данные, потому что я нашел , что это проще. Дайте мне знать , если вы можете жить с этим. Поскольку Gnuplot не имеет функции транспонирования, вы должны либо реализовать его самостоятельно или использовать внешнее программное обеспечение. Последний, я обычно стараюсь избегать из - за платформы-независимость. Я думаю , есть также способ сделать тот же сюжет для исходной информации.

Я предпочитаю замышляет стиль with boxxyerrorвместо with boxesкоторого всегда начинается с нуля. На самом деле, последняя команда сюжета не замышляет ничего , но просто получить как - то легенду. Это все еще неоптимальным. Дополнительное заявление может быть добавлено , который говорит вам , какой стек Data1 и который Data2.

Код:

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

Результат:

введите описание изображения здесь

Ответил 05/12/2019 в 17:58
источник пользователем

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