Search code examples
colorsgridgnuplotarea

gnuplot: How to create colored grid regions, not just colored grid lines?


I am using "gnuplot 5.2 patchlevel 2". I am trying to create background grid colored-columns or colored-areas like the picture below. So far, I am only able to color the grid-lines. But I want to color the grid areas. What is the best way? Here is my code:

set terminal svg 
set output 'out.svg'
set key off  
set xlabel 'X'
set ylabel 'Y'
set title 'Data'

set grid
set grid xtics  lw 0.25 lc rgb "#ff0000" # line only, but I want to color the whole area
#unset grid
#set grid ytics lt 0 lw 1 lc rgb "#0000ff"

set xrange [0:4]
set yrange [0:100]
set tics scale 0.5
set xtics nomirror
set ytics nomirror
set style fill solid noborder
set linetype 1 lc rgb 'red' lw 0.35
set linetype 2 lc rgb '#009900' 
set linetype 3 lc rgb 'black' lw 0.5
set boxwidth 0.5 relative 
set style fill solid border lc rgb "black" 
plot "data.txt" using 1:2:4:3:5:($5 < $2 ? 1 : 2)  linecolor variable with candlesticks, \
     "data.txt" using 1:6 with lines lt 3, \
     "data.txt" using 1:5:7 with filledcurves fs transparent solid 0.3 lc rgb "blue" 

And here is my sample data.txt file for the plotting:

1 10 30  5 20 23 29
2 25 45 10 30 34 37
3 30 50 20 25 47 53

enter image description here


Solution

  • You could use a dummy function like [x=0:16:1] '+' us (x/2):(100/(int(x)%4!=1)) with filledcurves x1. Every fourth point generates a NaN and interrupts the curve.

    $data <<EOD
    1 10 30  5 20 23 29
    2 25 45 10 30 34 37
    3 30 50 20 25 47 53
    5 10 30  5 20 23 29
    7 25 45 10 30 34 37
    8 30 50 20 25 47 53
    EOD
    
    set style fill solid noborder
    set linetype 1 lc rgb 'red' lw 0.35
    set linetype 2 lc rgb '#009900' 
    set linetype 3 lc rgb 'black' lw 0.5
    set boxwidth 0.5 relative 
    set style fill solid border lc rgb "black" 
    plot sample [x=0:16:1] '+' us (x/2):(100/(int(x)%4!=1)) with filledcurves x1 fc rgb "#EEEEEE",\
         $data using 1:2:4:3:5:($5 < $2 ? 1 : 2)  linecolor variable with candlesticks, \
         $data using 1:6 with lines lt 3, \
         $data using 1:5:7 with filledcurves fs transparent solid 0.3 lc rgb "blue" 
    

    enter image description here

    This function could be also assigned to the y2 axis with fixed y2range, which might be more handy for interactive plots with zooming.