Histograma Gnuplot mistura Agrupamentos / empilhado

votos
0

Eu tenho um histograma consisiting em 4 colunas. Gostaria de agrupadas em pares de ter dois grupos de cluster feito de dois colums empilhados.

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

com o arquivo de 'dados' meu organizado da seguinte forma

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

I obtido apenas um diagrama simples empilhadas com todas as colunas separadas por cada outra

digite

Publicado 02/12/2019 em 23:52
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

O seguinte pode ser um ponto de partida para mais ajustes. Tentei mantê-lo em geral, de modo que você pode facilmente adicionar mais colunas ou linhas.

Em seu código você está somando-se os valores da coluna "manualmente" $2+$3+$4. Certamente existem maneiras para resumir colunas "automaticamente". Mas, eu me permiti transpor seus dados, porque eu achei mais fácil. Deixe-me saber se você pode viver com ela. Desde gnuplot não tem nenhuma função de transposição, você tem que implementá-lo você mesmo ou usar software externo. Este último, eu costumo tentar evitar por causa da plataforma de independência. Eu acho que há também uma maneira de fazer o mesmo enredo para seus dados originais.

Eu prefiro o estilo de plotagem with boxxyerrorem vez de with boxesque está sempre começando do zero. Na verdade, o último comando plot está tramando nada, mas apenas recebendo alguma forma a lenda. Este ainda é abaixo do ideal. Uma declaração adicional poderia ser acrescentado que informa qual a pilha é Data1 e que é Data2.

Código:

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

Resultado:

digite descrição da imagem aqui

Respondeu 05/12/2019 em 17:58
fonte usuário

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