Histogram Gnuplot míchání do clusteru / zaplněný

hlasů
0

Mám histogram sestávající ve 4 sloupcích. Já bych jim seskupeny v párech mít dvě seskupený skupiny složené ze dvou nad sebou 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

s mým file ‚údaje‘ organizovaný takto

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

Získal jsem jen jednoduchý zaplněný diagram se všemi sloupců oddělených navzájem

zadejte

Položena 02/12/2019 v 23:52
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Měly by se výchozí bod pro další ladění. Snažil jsem se, aby to obecně, takže můžete snadno přidat více sloupců nebo řádků.

V kódu se sečtením hodnoty sloupců „ručně“ $2+$3+$4. Existují samozřejmě způsoby, jak shrnují sloupce „automaticky“. Ale Dovolil jsem sám provést svá data, protože jsem zjistil, že je jednodušší. Dejte mi vědět, zda můžete žít s ní. Vzhledem k tomu, gnuplot nemá žádnou funkci transpozice, budete buď muset provést sami, nebo použít externí software. Posledně jsem se obvykle snaží vyhnout, protože na platformě nezávislosti. Myslím, že je také způsob, jak udělat stejnou zápletku původní data.

Dávám přednost vykreslování styl with boxxyerrormísto with boxes, které se vždy začíná od nuly. Ve skutečnosti, poslední příkaz plot je vynesením nic jiného, než jen na to nějak legendu. To je stále optimální. Další prohlášení by mohlo být přidáno, který vám řekne, který zásobník je Data1 a který je 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

Výsledek:

zadejte popis obrázku zde

Odpovězeno 05/12/2019 v 17:58
zdroj uživatelem

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