gnuplot contour line color: set style line and set linetype not working
Here is how you can change the line properties of the contour lines. I can't explain why it is that way, I just found out by testing it. Unfortunately, there is no documentation about these details.
The behaviour is as follows (tested with 4.6.3. and 4.7 (2013-07-25 and 2013-09-09), all show the same behaviour):
Default settings
If no
linetype
is specified forsplot
, the surface itself would uselt 1
. In that case the first contour is drawn withlt 3
. Yes, the numbering is backwards compared to the specified increment. But you can reverse it by usingset cntrparam levels increment -6,-6,-18
orset cntrparam levels increment -18,6,-6
The
linewidth
of all contours is the same and also equal to thelinewidth
used for the plotting command, to change it use e.g.splot 'new_test.dat' lw 3
.
The result (without the thicker lines) is as shown in the question.
Using linestyles
The contours use the
linestyle
with an index by one higher than the one used by the plotting command.You must also define the first
linestyle
, which would be used by the surface. If this style is not defined, the contours fall back to usinglinetype
.The
linewidth
is taken from the firstlinestyle
, alllw
settings from the followingls
are ignored.
Using customized linetypes
The contours use the
linetype
with an index by one higher than the one used by the plotting command.All
linetype
must be customized, also the first, the one used by the surface. Otherwise the default settings are used.lw
same as forlinestyle
.
For testing I used your data and the following stripped down script:
reset
set terminal pngcairo size 800,800
set output '3d-polar.png'
set lmargin at screen 0.05
set rmargin at screen 0.85
set bmargin at screen 0.1
set tmargin at screen 0.9
set pm3d map interpolate 20,20
# plot the heatmap
set cntrparam bspline
set cntrparam points 10
set cntrparam levels increment -6,-6,-18
set contour surface
set palette rgb 33,13,10
set cbrange [-18:0]
unset border
unset xtics
unset ytics
set angles degree
r = 3.31
set xrange[-r:r]
set yrange[-r:r]
set colorbox user origin 0.9,0.1 size 0.03,0.8
# load one of the following files:
#load 'linestyle.gp'
#load 'linetype.gp'
splot 'new_test.dat' title ' '
The cbrange
is defined only down to -18
, so I changed the contour levels accordingly (-24
wasn't drawn anyway).
The two 'contour settings files', which I use are:
linetype.gp
:
set linetype 1 lc rgb "blue" lw 3
set linetype 2 lc rgb "black"
set linetype 3 lc rgb "orange"
set linetype 4 lc rgb "yellow"
linestyle.gp
:
set style increment user
set style line 1 lc rgb 'blue' lw 3
set style line 2 lc rgb 'black'
set style line 3 lc rgb 'orange'
set style line 4 lc rgb 'yellow'
Both give the same output image:
To use this for your complete script, just load one of the two files directly before the splot
command. This gives the output:
After your first question about contours, I was about to submit a bug report, but it turned out to be rather difficult to boil it down to concrete questions. With this question it might be easier. I'll see if I find some time to do this.
I had to refer back to this question when I was again doing some GNUplot plotting, this time in rectangular coordinates, and found that could not recall how to control the line type for contour lines.
I found that the info above is now not quite correct, and I have discovered a way to explain how this works as of GNUplot version 5 patchlevel 3.
There are three things I found to control the contour lines: 1. the 'set cntrparam levels increment' command, and 2. the command 'set style increment user', and 3. the list of line styles (I used the 'set style' command)
It turns out it's a little tricky. Let me give an example or two from my own code:
#HOW TO CONTROL LINE COLOR AND WIDTH FOR CONTOUR LINES:
#the number of contour lines and their level is controlled using the 'set cntrparam' command, above
#the 'set cntrparam' has the format 'start,increment,end' for the line positions
#note that the end level is listed at the top of the key/legend for the lines!
#line style 1 is used elsewhere, not for contour lines
#line style 2 is used for the style of the last line (e.g. end, or the last one drawn)
#line styles for other lines begins further down the list of styles and works UPWARDS to line style 2
#example 1: three lines at -40, -30, and -20
# set cntrparam levels increment -20,-10,-40
# set style line 1 lw 0.5 lc "grey30"
# set style line 2 lw 0.5 lc "blue"
# set style line 3 lw 0.5 lc "white"
# set style line 4 lw 0.5 lc "red"
# This results in:
# -20 line color is RED
# -30 line color is WHITE
# -40 line color is BLUE
#
#example 2: four lines at -35, -30, -25, and -20
# set cntrparam levels increment -20,-5,-35
# set style line 1 lw 0.5 lc "grey30"
# set style line 2 lw 0.5 lc "blue"
# set style line 3 lw 0.5 lc "white"
# set style line 4 lw 0.5 lc "red"
# set style line 5 lw 0.5 lc "yellow"
# This results in:
# -20 line color is YELLOW
# -25 line color is RED
# -30 line color is WHITE
# -35 line color is BLUE
I'm hoping that others will find this useful and informative. Perhaps Christoph (if he happens to read this thread) can comment, since GNUplot is an evolving tool and he would know about it in detail.