Mercurial > octave
changeset 26243:b22a2aa820e6
legend.m: Implement new placement algorithm with larger spacing from axes.
* legend.m: New variable "bpad" specifying legend box padding to axes.
Use bpad in all spacing calculations for legend location.
author | Rik <rik@octave.org> |
---|---|
date | Sat, 15 Dec 2018 20:28:52 -0800 |
parents | 2730917a7979 |
children | 58b3107a00bc |
files | scripts/plot/appearance/legend.m |
diffstat | 1 files changed, 48 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/plot/appearance/legend.m Sat Dec 15 15:44:01 2018 -0800 +++ b/scripts/plot/appearance/legend.m Sat Dec 15 20:28:52 2018 -0800 @@ -585,6 +585,8 @@ xpad = 2 + 1/3; ypad = 4; + bpad = 8; # padding of legend box from surrounding axes + linelength = 15; ## Preamble code to restore figure and axes after legend creation @@ -765,95 +767,98 @@ case "north" if (outside) lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ... - ca_outpos(2) + ca_outpos(4) - lpos(4) - ypad, lpos(3), ... - lpos(4)]; + ca_outpos(2) + ca_outpos(4) - lpos(4) - bpad/2, ... + lpos(3), lpos(4)]; new_pos = [ca_pos(1), ca_pos(2), ca_pos(3), ca_pos(4) - lpos(4)]; else lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ... - ca_pos(2) + ca_pos(4) - lpos(4) - ypad, lpos(3), lpos(4)]; + ca_pos(2) + ca_pos(4) - lpos(4) - bpad, ... + lpos(3), lpos(4)]; endif case "south" if (outside) lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ... - ca_outpos(2) + ypad, lpos(3), lpos(4)]; - new_pos = [ca_pos(1), lpos(2) + lpos(4) + 2 * ypad ... - + tightinset(2), ca_pos(3), ... - ca_pos(4) - lpos(4)]; + ca_outpos(2) + bpad/2, lpos(3), lpos(4)]; + new_pos = [ca_pos(1), ... + lpos(2) + lpos(4) + bpad/2 + tightinset(2), ... + ca_pos(3), ca_pos(4) - lpos(4)]; else lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ... - ca_pos(2) + ypad, lpos(3), lpos(4)]; + ca_pos(2) + bpad, lpos(3), lpos(4)]; endif case "east" if (outside) - lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ... - ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)]; + lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - bpad/2, ... + ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, ... + lpos(3), lpos(4)]; new_pos = [ca_pos(1), ca_pos(2), ... - lpos(1) - 2 * xpad - ca_pos(1) - tightinset(3), ... + lpos(1) - bpad - tightinset(3) - ca_pos(1), ... ca_pos(4)]; - new_pos(3) = new_pos(3) + gnuplot_offset; + new_pos(3) += gnuplot_offset; else - lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ... + lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - bpad, ... ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)]; endif case "west" if (outside) - lpos = [ca_outpos(1) + ypad, ... + lpos = [ca_outpos(1) + bpad/2, ... ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, ... lpos(3), lpos(4)]; - new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ... - ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)]; - new_pos(1) = new_pos(1) - gnuplot_offset; - new_pos(3) = new_pos(3) + gnuplot_offset; + new_pos = [lpos(1) + lpos(3) + bpad/2 + tightinset(1), ... + ca_pos(2), ca_pos(3) - lpos(3) - bpad/2, ca_pos(4)]; + new_pos([1, 3]) += [-gnuplot_offset, gnuplot_offset]; else - lpos = [ca_pos(1) + ypad, ... + lpos = [ca_pos(1) + bpad, ... ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)]; endif case "northeast" if (outside) - lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ... - ca_pos(2) + ca_pos(4) - lpos(4), lpos(3), lpos(4)]; + lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - bpad/2, ... + ca_pos(2) + ca_pos(4) - lpos(4), ... + lpos(3), lpos(4)]; new_pos = [ca_pos(1), ca_pos(2), ... - lpos(1) - 2 * xpad - tightinset(3) - ca_pos(1), ... + lpos(1) - bpad - tightinset(3) - ca_pos(1), ... ca_pos(4)]; - new_pos(3) = new_pos(3) + gnuplot_offset; + new_pos(3) += gnuplot_offset; else - lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ... - ca_pos(2) + ca_pos(4) - lpos(4) - ypad, lpos(3), lpos(4)]; + lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - bpad, ... + ca_pos(2) + ca_pos(4) - lpos(4) - bpad, ... + lpos(3), lpos(4)]; endif case "northwest" if (outside) - lpos = [ca_outpos(1) + ypad , ca_pos(2) + ca_pos(4) - lpos(4), ... + lpos = [ca_outpos(1) + bpad/2, ... + ca_pos(2) + ca_pos(4) - lpos(4), ... lpos(3), lpos(4)]; - new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ... - ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)]; - new_pos(1) = new_pos(1) - gnuplot_offset; - new_pos(3) = new_pos(3) + gnuplot_offset; + new_pos = [lpos(1) + lpos(3) + bpad/2 + tightinset(1), ... + ca_pos(2), ca_pos(3) - lpos(3) - bpad/2, ca_pos(4)]; + new_pos([1, 3]) += [-gnuplot_offset, gnuplot_offset]; else - lpos = [ca_pos(1) + ypad, ... - ca_pos(2) + ca_pos(4) - lpos(4) - ypad, lpos(3), lpos(4)]; + lpos = [ca_pos(1) + bpad, ... + ca_pos(2) + ca_pos(4) - lpos(4) - bpad, ... + lpos(3), lpos(4)]; endif case "southeast" if (outside) - lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ... + lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - bpad/2, ... ca_pos(2), lpos(3), lpos(4)]; new_pos = [ca_pos(1), ca_pos(2), ... - lpos(1) - 2 * xpad - ca_pos(1) - tightinset(3), ... + lpos(1) - bpad - ca_pos(1) - tightinset(3), ... ca_pos(4)]; - new_pos(3) = new_pos(3) + gnuplot_offset; + new_pos(3) += gnuplot_offset; else - lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ... - ca_pos(2) + ypad, lpos(3), lpos(4)]; + lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - bpad, ... + ca_pos(2) + bpad, lpos(3), lpos(4)]; endif case "southwest" if (outside) - lpos = [ca_outpos(1) + ypad, ca_pos(2), lpos(3), lpos(4)]; - new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ... - ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)]; - new_pos(1) = new_pos(1) - gnuplot_offset; - new_pos(3) = new_pos(3) + gnuplot_offset; + lpos = [ca_outpos(1) + bpad/2, ca_pos(2), lpos(3), lpos(4)]; + new_pos = [lpos(1) + lpos(3) + bpad/2 + tightinset(1), ... + ca_pos(2), ca_pos(3) - lpos(3) - bpad/2, ca_pos(4)]; + new_pos([1, 3]) += [-gnuplot_offset, gnuplot_offset]; else - lpos = [ca_pos(1) + ypad, ca_pos(2) + ypad, lpos(3), lpos(4)]; + lpos = [ca_pos(1) + bpad, ca_pos(2) + bpad, lpos(3), lpos(4)]; endif endswitch