In a
previous post I talked about create a round corner rectangle in gnuplot. But none application was involved in that post. Today I use the method to create a round corner key box.
###############################################
#Variables:
##(a,b) is the low left vertex of the rectangle
##(c,d) is the up right vertex of the rectangle
##rx is the radius along x-axis
##ry is the radius along y-axis
##x is the independent variable of the curve
f_low(a,b,c,d,rx,ry,x)=a<x && x<a+rx ? \
-ry*sqrt(1-((x-a-rx)/rx)**2)+b+ry : \
a+rx<x && x<c-rx ? b :c-rx<x && x<c ?\
-ry*sqrt(1-((x-c+rx)/rx)**2)+b+ry : 1/0
#The low curve of a round corner rectangle
f_up(a,b,c,d,rx,ry,x)=a<x && x<a+rx ?\
ry*sqrt(1-((x-a-rx)/rx)**2)+d-ry : \
a+rx<x && x<c-rx ? d :c-rx<x && x<c ?\
ry*sqrt(1-((x-c+rx)/rx)**2)+d-ry : 1/0
#The up curve of a round corner rectangle
###############################################
reset
set term png font "Times,18" #terminal and output file
set output "round_corner_rectangle_key_box.png"
set tics out nomirror
unset key #key will be created manually
set sample 1000 #samples
#Setting the back ground color
set object 1 rect from graph 0,0 to graph 1,1 back
set object 1 rect fc rgb "#AAAAFF" fillstyle solid 1.0
#The text of the key (some people call it legend)
set label center "y=f(x)" at 5.75,0.7 front
#x and y label
set xlabel "x"
set ylabel "y=f(x)"
#Plot the curve,round corner rectangle and sample line of key
plot sin(5.*x)*exp(-x*x/20.) w l lw 2 lc rgb"green",\
'+' u 1:(f_low(3.5,0.5,9,0.9,0.5,0.05,$1)):\
(f_up(3.5,0.5,9,0.9,0.5,0.05,$1)) w filledcurve\
lc rgb"pink" notitle,\
x>7.5 && x<8.5 ?0.7:1/0 w l lw 2 lc rgb"green"
Nothing new in this script. The only important and difficult thing is deciding the position of the key text, key sample line and key box. At last we get a picture like this one.
 |
| Round corner key box in gnuplot |
This article demonstrates a clever and creative extension of gnuplot’s capabilities by manually constructing a smooth, round-corner legend (key) box using mathematical curve definitions and the filledcurve plotting style. Instead of relying on default key styling, it showcases how geometric functions can be used to simulate modern UI-like aesthetics within a scientific plotting environment. The approach reflects a strong understanding of both gnuplot’s limitations and its flexibility, turning a simple legend into a visually refined component while emphasizing that precise positioning and parameter tuning are key to achieving clean, professional-quality graphics.
ReplyDelete