2fishandchips
2fishandchips

Reputation: 21

gnuplot stacked bar chart arithmetic

tmp.data
DATE         D0 D1 D2 D3 D4 D5
"2017-07-19" 10 8  6  4  2  1
"2017-07-20" 16  14  10 11  10  9
"2017-07-21" 6  5  4  4  3  1
"2017-07-22" 7  5  4  4  3  2 
"2017-07-23" 8  6  4  2  1  1

tmp.gnu
set terminal png size 
set output 'output.png'
set title "statistics"
set key font ",10"
D0 = "#99ffff"; D1 = "#4671d5"; D2 = "#ff0000"; D3 = "#f36e00"; D4 = "#8A2BE2#'; D5 = "#4671d5"
set auto x
unset xtics
set xtics nomirror rotate by -45 scale 0
set style data histogram
set style histogram rowstacked
set style fill solid border -1
set boxwidth 0.75
 plot 'tmp.data' u 2:xtic(1) title columnheader, \
 '' u 3:xtic(1) title columnheader, \
 '' u 4:xtic(1) title columnheader, \
 '' u 5:xtic(1) title columnheader, \
 '' u 6:xtic(1) title columnheader, \
 '' u 7:xtic(1) title columnheader

Creates the following: enter image description here

The columns are accumulative. What I'd like to have is have it proportional, for example in row 2.

10 - 8 = 2, 
8 -  6 = 2, 
6 -  4 = 2, 
4 -  2 = 2, 
2 -  1 = 1

Upvotes: 1

Views: 1124

Answers (1)

Christoph
Christoph

Reputation: 48390

If you want to plot the difference between two columns, then you must calculate the difference inside the using statement like

plot "tmp.data" using ($2 - $3):xtic(1)

to plot the difference between third and second column. For all your columns, and keeping the second as is, use (using the inline data $data requires 5.0):

$data <<EOD
DATE         D0 D1 D2 D3 D4 D5
"2017-07-19" 10 8  6  4  2  1
"2017-07-20" 16  14  10 11  10  9
"2017-07-21" 6  5  4  4  3  1
"2017-07-22" 7  5  4  4  3  2 
"2017-07-23" 8  6  4  2  1  1
EOD

set xtics nomirror rotate by -45 scale 0
set style data histogram
set style histogram rowstacked
set style fill solid border -1
set boxwidth 0.75
set key auto columnheader
 plot $data u 2:xtic(1), \
  for [i=3:7] '' u (abs(column(i) - column(i-1))):xtic(1)

Here, you must decide if you need the abs or not. The result is:

enter image description here

Upvotes: 1

Related Questions