comparison scripts/plot/legend.m @ 16910:8a4e53cf79c9

Modify the plotbox position relative to the keybox position. scripts/plot/legend.m: Position the plotbox relative to the keybox and account for the tightinset.
author Ben Abbott <bpabbott@mac.com>
date Sat, 06 Jul 2013 12:25:21 -0400
parents 8f9ed9d8a478
children 9a316ec12b5f
comparison
equal deleted inserted replaced
16909:8f9ed9d8a478 16910:8a4e53cf79c9
567 "unmodified_axes_outerposition"); 567 "unmodified_axes_outerposition");
568 endif 568 endif
569 ca_pos = unmodified_axes_position; 569 ca_pos = unmodified_axes_position;
570 ca_outpos = unmodified_axes_outerposition; 570 ca_outpos = unmodified_axes_outerposition;
571 ca_fontsize = get (ca(1), "fontsize"); 571 ca_fontsize = get (ca(1), "fontsize");
572 tightinset = get (ca(1), "tightinset");
573 for i = 2 : numel (ca)
574 tightinset = max (tightinset, get (ca(i), "tightinset"));
575 endfor
572 unwind_protect_cleanup 576 unwind_protect_cleanup
573 set (ca(1), "units", units); 577 set (ca(1), "units", units);
574 set (ca(1), "fontunits", fontunits); 578 set (ca(1), "fontunits", fontunits);
575 end_unwind_protect 579 end_unwind_protect
576 580
699 gnuplot_offset = gnuplot_offset - 2 * fontsize; 703 gnuplot_offset = gnuplot_offset - 2 * fontsize;
700 else 704 else
701 gnuplot_offset = 0; 705 gnuplot_offset = 0;
702 endif 706 endif
703 707
708 ## For legend's outside the associated axes postion, align their edge
709 ## to the unmodified_axes_outerpostion, and adjust the axes postion
710 ## accordingly.
704 switch (location) 711 switch (location)
705 case "north" 712 case "north"
706 if (outside) 713 if (outside)
707 lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ... 714 lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ...
708 ca_outpos(2) + ca_outpos(4) - lpos(4) - ypad, lpos(3), ... 715 ca_outpos(2) + ca_outpos(4) - lpos(4) - ypad, lpos(3), ...
715 endif 722 endif
716 case "south" 723 case "south"
717 if (outside) 724 if (outside)
718 lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ... 725 lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ...
719 ca_outpos(2) + ypad, lpos(3), lpos(4)]; 726 ca_outpos(2) + ypad, lpos(3), lpos(4)];
720 new_pos = [ca_pos(1), ca_pos(2) + lpos(4), ca_pos(3), ... 727 new_pos = [ca_pos(1), lpos(2) + lpos(4) + 2 * ypad ...
728 + tightinset(2), ca_pos(3), ...
721 ca_pos(4) - lpos(4)]; 729 ca_pos(4) - lpos(4)];
722 else 730 else
723 lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ... 731 lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ...
724 ca_pos(2) + ypad, lpos(3), lpos(4)]; 732 ca_pos(2) + ypad, lpos(3), lpos(4)];
725 endif 733 endif
726 case "east" 734 case "east"
727 if (outside) 735 if (outside)
728 lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ... 736 lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ...
729 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)]; 737 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)];
730 new_pos = [ca_pos(1), ca_pos(2), ca_pos(3) - lpos(3), ca_pos(4)]; 738 new_pos = [ca_pos(1), ca_pos(2), ...
739 lpos(1) - 2 * xpad - ca_pos(1) - tightinset(3), ...
740 ca_pos(4)];
731 new_pos(3) = new_pos(3) + gnuplot_offset; 741 new_pos(3) = new_pos(3) + gnuplot_offset;
732 else 742 else
733 lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ... 743 lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ...
734 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)]; 744 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)];
735 endif 745 endif
736 case "west" 746 case "west"
737 if (outside) 747 if (outside)
738 lpos = [ca_outpos(1) + ypad, ... 748 lpos = [ca_outpos(1) + ypad, ...
739 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, ... 749 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, ...
740 lpos(3), lpos(4)]; 750 lpos(3), lpos(4)];
741 new_pos = [ca_pos(1) + lpos(3), ca_pos(2), ... 751 new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ...
742 ca_pos(3) - lpos(3), ca_pos(4)]; 752 ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)];
743 new_pos(1) = new_pos(1) - gnuplot_offset; 753 new_pos(1) = new_pos(1) - gnuplot_offset;
744 new_pos(3) = new_pos(3) + gnuplot_offset; 754 new_pos(3) = new_pos(3) + gnuplot_offset;
745 else 755 else
746 lpos = [ca_pos(1) + ypad, ... 756 lpos = [ca_pos(1) + ypad, ...
747 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)]; 757 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)];
748 endif 758 endif
749 case "northeast" 759 case "northeast"
750 if (outside) 760 if (outside)
751 lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ... 761 lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ...
752 ca_pos(2) + ca_pos(4) - lpos(4), lpos(3), lpos(4)]; 762 ca_pos(2) + ca_pos(4) - lpos(4), lpos(3), lpos(4)];
753 new_pos = [ca_pos(1), ca_pos(2), ca_pos(3) - lpos(3), ca_pos(4)]; 763 new_pos = [ca_pos(1), ca_pos(2), ...
764 lpos(1) - 2 * xpad - tightinset(3) - ca_pos(1), ...
765 ca_pos(4)];
754 new_pos(3) = new_pos(3) + gnuplot_offset; 766 new_pos(3) = new_pos(3) + gnuplot_offset;
755 else 767 else
756 lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ... 768 lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ...
757 ca_pos(2) + ca_pos(4) - lpos(4) - ypad, lpos(3), lpos(4)]; 769 ca_pos(2) + ca_pos(4) - lpos(4) - ypad, lpos(3), lpos(4)];
758 endif 770 endif
759 case "northwest" 771 case "northwest"
760 if (outside) 772 if (outside)
761 lpos = [ca_outpos(1) + ypad , ca_pos(2) + ca_pos(4) - lpos(4), ... 773 lpos = [ca_outpos(1) + ypad , ca_pos(2) + ca_pos(4) - lpos(4), ...
762 lpos(3), lpos(4)]; 774 lpos(3), lpos(4)];
763 new_pos = [ca_pos(1) + lpos(3), ca_pos(2), ... 775 new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ...
764 ca_pos(3) - lpos(3), ca_pos(4)]; 776 ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)];
765 new_pos(1) = new_pos(1) - gnuplot_offset; 777 new_pos(1) = new_pos(1) - gnuplot_offset;
766 new_pos(3) = new_pos(3) + gnuplot_offset; 778 new_pos(3) = new_pos(3) + gnuplot_offset;
767 else 779 else
768 lpos = [ca_pos(1) + ypad, ... 780 lpos = [ca_pos(1) + ypad, ...
769 ca_pos(2) + ca_pos(4) - lpos(4) - ypad, lpos(3), lpos(4)]; 781 ca_pos(2) + ca_pos(4) - lpos(4) - ypad, lpos(3), lpos(4)];
771 case "southeast" 783 case "southeast"
772 if (outside) 784 if (outside)
773 lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ... 785 lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ...
774 ca_pos(2), lpos(3), lpos(4)]; 786 ca_pos(2), lpos(3), lpos(4)];
775 new_pos = [ca_pos(1), ca_pos(2), ... 787 new_pos = [ca_pos(1), ca_pos(2), ...
776 ca_pos(3) - lpos(3), ca_pos(4)]; 788 lpos(1) - 2 * xpad - ca_pos(1) - tightinset(3), ...
789 ca_pos(4)];
777 new_pos(3) = new_pos(3) + gnuplot_offset; 790 new_pos(3) = new_pos(3) + gnuplot_offset;
778 else 791 else
779 lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ... 792 lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ...
780 ca_pos(2) + ypad, lpos(3), lpos(4)]; 793 ca_pos(2) + ypad, lpos(3), lpos(4)];
781 endif 794 endif
782 case "southwest" 795 case "southwest"
783 if (outside) 796 if (outside)
784 lpos = [ca_outpos(1) + ypad, ca_pos(2), lpos(3), lpos(4)]; 797 lpos = [ca_outpos(1) + ypad, ca_pos(2), lpos(3), lpos(4)];
785 new_pos = [ca_pos(1) + lpos(3), ca_pos(2), ... 798 new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ...
786 ca_pos(3) - lpos(3), ca_pos(4)]; 799 ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)];
787 new_pos(1) = new_pos(1) - gnuplot_offset; 800 new_pos(1) = new_pos(1) - gnuplot_offset;
788 new_pos(3) = new_pos(3) + gnuplot_offset; 801 new_pos(3) = new_pos(3) + gnuplot_offset;
789 else 802 else
790 lpos = [ca_pos(1) + ypad, ca_pos(2) + ypad, lpos(3), lpos(4)]; 803 lpos = [ca_pos(1) + ypad, ca_pos(2) + ypad, lpos(3), lpos(4)];
791 endif 804 endif
961 addlistener (hlegend, "interpreter", @updatelegendtext); 974 addlistener (hlegend, "interpreter", @updatelegendtext);
962 addlistener (hlegend, "location", @updatelegend); 975 addlistener (hlegend, "location", @updatelegend);
963 addlistener (hlegend, "orientation", @updatelegend); 976 addlistener (hlegend, "orientation", @updatelegend);
964 addlistener (hlegend, "string", @updatelegend); 977 addlistener (hlegend, "string", @updatelegend);
965 addlistener (hlegend, "textposition", @updatelegend); 978 addlistener (hlegend, "textposition", @updatelegend);
979 ## TODO - need to add listeners for tighinset and position
980 ## addlistener (ca, "tightinset", @update????);
981 ## addlistener (ca, "position", @update????);
966 endif 982 endif
967 unwind_protect_cleanup 983 unwind_protect_cleanup
968 set (fig, "currentaxes", curaxes); 984 set (fig, "currentaxes", curaxes);
969 end_unwind_protect 985 end_unwind_protect
970 endif 986 endif