Search code examples
gnuplot

Gnuplot: set angular grid limits in polar plot


I am trying to make a wedge-shaped plot in polar coordinates spanning from 0 to 60 degrees. Something like the following figure: Wedge-plot I want

enter image description here

However, the command "trange" is used for the range of the plot, not of the grid itself, and I always end up with the full-circle grid, like this: Same plot but with full grid.

enter image description here

Is there a simple command to set the limits in the angle variable? Here is the code I used to plot the former figure in gnuplot 5.2

set terminal pngcairo enhanced font "arial,10" fontscale 1.0 size 600, 400 
set output 'polar1.png'

unset key
set border 4096 lt black linewidth 1.000 dashtype solid
unset xtics
unset ytics
set size ratio 1 1,1

set raxis
set ttics 0.00000,30 font ":Italic"

set polar
set grid polar 30.0000 lw 1.5
plot cos(4*t) lt 3 lw 2

Thank you in advance!


Solution

  • I guess there is no "intended" way to limit the maximum angle in a polar plot. So, there is a simpler (but ugly) workaround, which simply covers the unwanted part by a filled polygon.

    Note: There will be an issue if your rmax is not an integer multiple of rtic 0.2, i.e. a plot with rmax=1.05 will not look as desired. Therefore, as a workaround an extra rtic at rmax is added.

    Script:

    ### plot only part of polar plot
    reset session
    
    rmax = 1.05
    amax = 60
    
    set polar
    set rrange [0:rmax]
    set rtics 0.2 scale 0.5
    set rtics add ('' rmax)
    set grid r polar 10 lt black lw .3
    
    set trange [0:2*pi]
    set ttics 0,10 format "%g°" font ":Italic" scale 0.5,0.25 offset -1,0
    set mttics 2
    
    set xlabel "r-label"
    set xrange [0:rmax]
    unset xtics
    set yrange [0:rmax]
    unset ytics
    
    set size square
    set border 4096
    set lmargin 0
    set tmargin 0
    unset title
    unset key
    set samples 300
    
    set obj 1 polygon from graph 0,0 to first rmax*cos(pi/180*amax),rmax*sin(pi/180*amax) \
                to first rmax*cos(pi/180*amax), screen 1.0 \
                to first 0, screen 1 to screen 0,1 to screen 0,0 to graph 0,0 \
                      fc rgb 0xffffff fs solid 1.0 front
    set arrow 1 from graph 0,0 to first rmax*cos(pi/180*amax),rmax*sin(pi/180*amax) lc "black" nohead front
    
    plot cos(4*t) lt 3 lw 2
    ### end of script
    

    Result:

    enter image description here