Specifically define colors of bars in histogram

6,154

This can help get you started:

colors='red blue green'
set for [c in colors] style line strstrt(colors,c) lc rgb c
plot 'test.dat' u (column(0)):2:(strstrt(colors,stringcolumn(3))):xtic(1) w boxes lc variable

Note that I've done away with the histograms style. I like boxes better :).

Now for the spacing. This takes a little trickery with an inline function:

idx=0.0
c_old=''
xidx(c)=(idx=idx+(c eq c_old?1.:1.5),cold=c,idx) #increment by 1 if same as old color, otherwise increment by 1.5
set for [c in colors] style line strstrt(colors,c) lc rgb c  #set linestyle for given color
plot 'test.dat' u (xidx(strcol(3))):2:(strstrt(colors,strcol(3))):xtic(1) w boxes lc variable
Share:
6,154

Related videos on Youtube

Michael
Author by

Michael

Updated on September 18, 2022

Comments

  • Michael
    Michael over 1 year

    See updated question below!:

    (1 Old stuff) I have the following code:

    clear
    reset
    unset key
    # Make the x axis labels easier to read.
    set xtics rotate out
    # Select histogram data
    set style data histogram
    # Give the bars a plain fill pattern, and draw a solid line around them.
    set style fill solid border
    
    set title "Intensity of luxA signal for different substances"
    
    set output 'luxA.png'
    set terminal png transparent nocrop enhanced font times 18 size 840,640 
    
    set ylabel "Intensität"
    
    set style histogram
    
    plot 'luxA.dat' using 2:xticlabels(1)
    

    And the following data:

    Name    Value   Color
    "SN wt" 1103    blue
    "SN ΔΔ" 124.3333333333  blue
    "SN -A" 367.3333333333  blue
    "SN -B" 147.3333333333  blue
    "10nM C100" 325.6666666667  red
    "200nM C100"    207.3333333333  red
    "300nM C100"    236.6666666667  red
    "LB"    180.6666666667  green
    "LuxX"  168 green
    "only LB"   62  green
    "only MQ"   64.6666666667   green
    "LB&wt" 65.3333333333   green
    "SN LuxX&wt"    73  green
    

    I want to color every bar according to the column "Color".

    It also would be nice, if I could group the different groups a bit closer spatially (smaller distances within group and bigger between groups).

    (2 New questions and data)

    New data (fourth line for error bars (deviation)):

    Name    Value   Color   Deviation
    "SN wt" 1103    #006400 61.0
    "SN ΔΔ" 124.3333333333  #006400 3.21
    "SN -CI"    367.3333333333  #006400 25.38
    "SN -B" 147.3333333333  #006400 20.74
    "10nM C8"   325.6666666667  #0000FF 20.13
    "200nM C8"  207.3333333333  #0000FF 28.7
    "300nM C8"  236.6666666667  #0000FF 35.91
    "1uM BDSF"  596.6666666667  #0000C6 44.12
    "10uM BDSF" 545.3333333333  #0000C6 102.01
    "15uM BDSF" 547 #0000C6 33.60
    "1uM DSF"   596.3333333333  #00008B 98.47
    "10uM DSF"  532 #00008B 21
    "15uM DSF"  653.6666666667  #00008B 13.65
    "LB"    180.6666666667  grey    20.13
    "LuxA"  168 grey    20.07
    "only LB"   62  grey    9.54
    "only MQ"   64.6666666667   grey    20.03   
    "LB \\& wt" 65.3333333333   grey    3.79
    "SN Lux \\& wt" 73  grey    14.53
    

    --> With this I want basically to achieve what I described above, but with error bars. The solution suggested below works for the colors, but not for the spacing on my computer (Ubuntu, gnuplot 4.4 patchlevel 2) And it is done with boxes? Is it possible to add error bars to boxes. I am a bit lost, I know C and Python but this gnuplot syntax scares my a bit... :-(

    So I would like to have: - Bars according to color - Same groups (according color) grouped spatially together (small spacing in group, large spacing among groups) - Error bars according to column 4 (I do not care if it is done with boxes or with histogram, as long as it works :-| ) - The solution from mgilson (Thanks a lot!) for the spacing gives me an error (See below). What am I doing wrong? I use it exactly as stated...

    By the way: What is your favourite gnuplot book out there?

  • Cheslab
    Cheslab over 11 years
    @Michael -- Sorry, copy/paste error in my second version. I tested it now and it seems to work with gnuplot 4.4.2 on OS-X using the x11 terminal. Hopefully that will work for you.
  • Cheslab
    Cheslab over 11 years
    @Michael -- the first version won't give you the spacing you want. The second version should give that to you...(It's just the first version with a little extra stuff tacked on to increase the space between boxes with different colors).
  • Cheslab
    Cheslab over 11 years
    OK, thanks! I just tested the color thing. But does the whole thing still produce error bars? I guess not???
  • Cheslab
    Cheslab over 11 years
    @Michael -- Error bars? What error bars?
  • Cheslab
    Cheslab over 11 years
    Ups, in this version I did not have introduced the error bars, sorry! Yeah, should also have error bars...
  • Cheslab
    Cheslab over 11 years
    I get: "LuxA.gnu", line 35: x_min should not equal x_max! This is the last line in your second code-block
  • mgilson
    mgilson over 11 years
    @Michael -- Somehow xidx got lost in my previous post. I don't know how that happened.