|
From: theozh <th...@gm...> - 2017-10-28 23:01:12
|
Thank you again, Ethan, for the explanations and links. What's still not clear to me why you can place the ysum=0 between two plot commands... What else can you place in front of a plot command? For example: n=1 plot n=n+1 sin(x*n) # works plot (n=1,n=n+1) sin(x*n) # doesn't work... why? Anyway, my original question is solved :-). Nevertheless, I played around a little further. If the portions in the stacked histogram are too small to fit a number, the following code shows a way to place those numbers on the side with a pointing arrow. Maybe some people also mind find this useful. The following code was working on my system (Win7, gnuplot 5.2) and should be ready for copy&paste&plot. Be aware that the mail program might have "messed up" the line breaks. ###### start gnuplot code reset $Data <<EOD XXX Header1 Header2 one 10 50 two 3 2 three 30 15 four 40 5 five 0.5 0.5 six 0.6 0.6 seven 1 17 EOD set style data histogram set style histogram columnstacked set style fill solid border -1 set boxwidth 0.6 YminSpace = 4 YStep = 2 YExtraDistance = -YStep XShift(n) = (n < YminSpace) ? 0.45 : 0 YShift(n) = (n < YminSpace) ? (YExtraDistance=YExtraDistance+YStep,YExtraDistance) : (YExtraDistance=-YStep,0) plot \ $Data u 2 ti col , '' u 3:key(1) ti col, \ ysum=0 '' skip 1 using (0+XShift($2)):((ysum = ysum + $2, ysum-$2/2+YShift($2))):2 with labels notitle, \ ysum=0 '' skip 1 using (1+XShift($3)):((ysum = ysum + $3, ysum-$3/2+YShift($3))):3 with labels notitle,\ ysum=0 '' skip 1 using ($2>YminSpace ? 1/0:(0+XShift($2)-0.05)):((ysum = ysum + $2, ysum-$2/2+YShift($2))):(-0.1):(-YExtraDistance) ls -1 with vectors not,\ ysum=0 '' skip 1 using ($3>YminSpace ? 1/0:(1+XShift($3)-0.05)):((ysum = ysum + $3, ysum-$3/2+YShift($3))):(-0.1):(-YExtraDistance) ls -1 with vectors not,\ ###### end gnuplot code |