Wolfram Alpha gives the following pretty plot:
Plot from Wolfram Alpha |
To plot the function in gnuplot we first have to do a little trick, because the step function is not included in gnuplot. It does have the sign function, however. So we can do the following: $$ \theta(x > \frac{1}{2}) = \frac{1 + \text{sgn}(x-\frac{1}{2})}{2} $$
A first attempt, with default settings is:
set terminal postscript eps set pm3d at s hidden3d unset hidden3d unset surface set xrange [0:1] set yrange [0:1] set samples 20,20 splot (1+sgn(x-0.5))*(sin(4*pi*x) + sin(4*pi*y)+2)/2 title ''
This gives
This doesn't really look too good. First thing that has to be changed is the color palette and the color of the grid. The color palette can be changed like this:
set terminal postscript eps set palette defined ( 0 "#bd2c29", 2 "#ffd35a", 6 "white")
The numbers in front of the color codes are the values of the function that the color should correspond to. Thankfully, gnuplot automatically interpolates the colors.
Next up is the grid color. The color can be set to a given line style by adding the style number at the end of the pm3d options:
set pm3d implicit at s hidden3d 100 set style line 100 lc rgb '#000000' lt 1 lw 0.6
Here I have defined the grid style to be a thin black line. I have chosen index 100 to make sure it doesn't clash with other settings.
After removing the color bar and shifting the image down with ticslevel, we get the final image:
This looks a lot better! The only thing missing is the shadowing of surfaces angled away from the camera. I am not aware of a way to produce these in gnuplot. If anyone has additional advice to improve the plot, please let me know!
The final version of the code:
set terminal postscript eps set output '| epstopdf --filter --outfile=plot.pdf' set palette defined ( 0 "#bd2c29", 2 "#ffd35a", 6 "white") set pm3d implicit at s hidden3d 100 set style line 100 lc rgb '#000000' lt 1 lw 0.6 unset hidden3d unset surface set border 4095 front linetype -1 linewidth 0.8 set ticslevel 0 set xrange [0:1] set yrange [0:1] set ztics 1 set isosamples 40,40 set samples 20,20 unset colorbox splot (1+sgn(x-0.5))*(sin(4*pi*x) + sin(4*pi*y)+2)/2 title ''
I haven't tried it, but there is a patch that does what you want:
ReplyDeletehttp://sourceforge.net/tracker/?func=detail&aid=3497570&group_id=2055&atid=352055
-------------------------------
Lee Phillips
Nice, I'll check it out!
ReplyDeleteHow to remove that color bar in gnuplot?
ReplyDelete