2

New to gnuplot. Probably a simple question, but help appreciated.

I am plotting a stacked histogram with 5 sections in each category (from columns 3-7 of the file). Depending on a variable in the second column of data (0 or 1)¸the colours of the sections are either black, green, yellow, magenta, red, or respectively red, magenta, yellow, green, black. I have been trying to make variations of this work:

plot 'themesdat.txt' u 3 not lt rgb ($2?0xff5050:0x808080),\
 '' u 4 not lt rgb ($2?0x966496:0x00ff66),\
 '' u 5 not lt rgb 0xffff00,\
 '' u 6 not lt rgb ($2?0x00ff66:0x966496"),\
 '' u 7 :xticlabels(1) not lt rgb ($2?0x808080:0xff5050)

The conditional produces an undefined value error. As I say, probably v simple problem, but I'm stuck!

Edit: sample (top 6 lines) of data file:-

#title band1, band2, band3, band4, band5, labelx, label1, ... label5
#band colours: ff5050¸966496, ffff00, 00ff66, 808080 (reversed for 1,7,8,11,12,16,7,18,19)
Satisfaction 1 43 15 0 16 26 0 "severe problems" probs " " help? fine
Frustration 0 42 11 18 0 29 1 fine help problems "" "severe problems"
CopingAbility 1 47 13 7 11 22 2 "severe problems" probs " " help? fine
Category 1 0 0 0 0 0 3 "" "" "" "" ""

Further edit: I'm thinking this may be impossible - to use a column from the data file to vary colours. Even a simpler construction, rgb ($2), does not appear to work.

If anyone knows otherwise ... ?

Christoph
  • 47,569
  • 8
  • 87
  • 187
Pansmanser
  • 23
  • 3

1 Answers1

0

If I understand correctly, you can try one of the approaches from this question, for example this answer. There you also find the explanations.

set terminal pngcairo  size 960,600
set output "conditional_fill.png"

datafile="themesdat.txt"
set yrange [0:100]

set key out
set style data histograms
set style histogram rowstacked
set boxwidth 0.8 relative
set style fill solid 1.0 border -1

set style line  3 lt 1 lc rgb "black"
set style line  4 lt 1 lc rgb "green"
set style line  5 lt 1 lc rgb "yellow" 
set style line  6 lt 1 lc rgb "magenta"
set style line  7 lt 1 lc rgb "red"

set style line 13 lt 1 lc rgb "red"
set style line 14 lt 1 lc rgb "magenta"
set style line 15 lt 1 lc rgb "yellow"
set style line 16 lt 1 lc rgb "green"
set style line 17 lt 1 lc rgb "black" 

color(x,y) = 10*x + y

stats datafile u 2 nooutput
n = STATS_records

set multiplot
do for [i=0:n-1] {
   plot datafile u (0):xticlabels(1) notitle,\
        newhistogram "" at i, \
              "" every ::i::i u (style = color($2, 3), 0) notitle,  \
              "" every ::i::i u 3 ls style title "severe problems", \
              "" every ::i::i u (style = color($2, 4), 0) notitle,  \
              "" every ::i::i u 4 ls style title "probs",           \
              "" every ::i::i u (style = color($2, 5), 0) notitle,  \
              "" every ::i::i u 5 ls style title " ",               \
              "" every ::i::i u (style = color($2, 6), 0) notitle,  \
              "" every ::i::i u 6 ls style title "help?",           \
              "" every ::i::i u (style = color($2, 7), 0) notitle,  \
              "" every ::i::i u 7 ls style title "fine"
}
unset multiplot

This is the result:

histogram with colors from column

maij
  • 4,094
  • 2
  • 12
  • 28