annotate scripts/plot/appearance/legend.m @ 24434:436deae9f9ab

legend.m: Overhaul function for greater Matlab compatibility. * legend.m: Add '{' and '}' and cellstr calling form in docstring. Add additional calling form with PROPERTY/VALUE pairs to docstring. Reword documentation for greater clarity. Use texinfo features in multitable to structure explanation of "outside" parameter. Expand Implementation Note to discuss more of legend features. Remove cumbersome handling of __plotyy_axes__ property which now returns a matrix value, always. Add "first" to unique() call to fix labels being out of order on plotyy charts. Delete parsed options in varargin, because the remainder are now passed as PROP/VAL pairs to the legend object. Accept "none" as Location value. Change 0 input argument case to create a legend if it does not exist (equivalent to "show"). Replace sytax of for loops over number of elements of a matrix with a direct for loop over each element of the matrix for code clarity. Only create up to 20 data labels automatically, and issue a warning if there are more. Recode while loops to find objects to label as they would frequently fail with bad-index warnings when index was allowed to reach 0. During creation of a new legend, set fontsize to 90% of axes fontsize. Add property, "autoupdate", although it is unimplemented. Change default edgecolor to [0.15, 0.15, 0.15] to match Matlab. Don't inherit other font properties from axes. Get rid of unwind_protect block and always create text objects using "units" of "points". Change callbacks to have "cb_" prefix and to use more informative names. Add "zliminclude", "off" to properties of invisible text object so that it won't be included in any axes limit calculations. Update %!demo blocks. Add new BIST tests. * legend.m (cb_legend_update): Modify to handle plotyy axes without throwing an error. * legend.m (cb_legend_text_update): Use indexing, rather than for loop, for performance. * legend.m (cb_legend_hideshow): Change input variable names for clarity. Use foreach loop rather than for loop for clarity.Use indexing, rather than for loop, for performance. * legend.m (cb_legend_location): New subfunction callback for "location" property. If location is "none", rely on "position" property. Otherwise, rebuild legend in new specified location. * legend.m (cb_axes_deleted): Remove deletefcn from legend before deleting it to avoid unnecessary callback. * legend.m (cb_restore_axes): Rename variables for clarity. Check position to restore is not empty before restoring it. * legend.m (cb_line_listener): Use indexing rather than for loops for performance.
author Rik <rik@octave.org>
date Wed, 20 Dec 2017 16:40:15 -0800
parents 6cf385e26616
children 359596cc55dd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23219
3ac9f9ecfae5 maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents: 23083
diff changeset
1 ## Copyright (C) 2010-2017 David Bateman
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
2 ##
6440
98ee80702bca [project @ 2007-03-23 15:13:19 by jwe]
jwe
parents: 6395
diff changeset
3 ## This file is part of Octave.
98ee80702bca [project @ 2007-03-23 15:13:19 by jwe]
jwe
parents: 6395
diff changeset
4 ##
98ee80702bca [project @ 2007-03-23 15:13:19 by jwe]
jwe
parents: 6395
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
98ee80702bca [project @ 2007-03-23 15:13:19 by jwe]
jwe
parents: 6395
diff changeset
6 ## under the terms of the GNU General Public License as published by
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22631
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22631
diff changeset
8 ## (at your option) any later version.
6440
98ee80702bca [project @ 2007-03-23 15:13:19 by jwe]
jwe
parents: 6395
diff changeset
9 ##
98ee80702bca [project @ 2007-03-23 15:13:19 by jwe]
jwe
parents: 6395
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
98ee80702bca [project @ 2007-03-23 15:13:19 by jwe]
jwe
parents: 6395
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22631
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22631
diff changeset
13 ## GNU General Public License for more details.
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
14 ##
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
17 ## <http://www.gnu.org/licenses/>.
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
18
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
19 ## -*- texinfo -*-
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
20 ## @deftypefn {} {} legend ()
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
21 ## @deftypefnx {} {} legend (@var{str1}, @var{str2}, @dots{})
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
22 ## @deftypefnx {} {} legend (@var{charmat})
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
23 ## @deftypefnx {} {} legend (@{@var{cellstr}@})
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20781
diff changeset
24 ## @deftypefnx {} {} legend (@dots{}, "location", @var{pos})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20781
diff changeset
25 ## @deftypefnx {} {} legend (@dots{}, "orientation", @var{orient})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20781
diff changeset
26 ## @deftypefnx {} {} legend (@var{hax}, @dots{})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20781
diff changeset
27 ## @deftypefnx {} {} legend (@var{hobjs}, @dots{})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20781
diff changeset
28 ## @deftypefnx {} {} legend (@var{hax}, @var{hobjs}, @dots{})
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20781
diff changeset
29 ## @deftypefnx {} {} legend ("@var{option}")
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
30 ## @deftypefnx {} {} legend (@dots{}, @{@var{cellstr}@}, @var{property}, @var{value}, @dots{})
20852
516bb87ea72e 2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents: 20781
diff changeset
31 ## @deftypefnx {} {[@var{hleg}, @var{hleg_obj}, @var{hplot}, @var{labels}] =} legend (@dots{})
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
32 ##
17122
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 17119
diff changeset
33 ## Display a legend for the current axes using the specified strings as labels.
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 17119
diff changeset
34 ##
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 17119
diff changeset
35 ## Legend entries may be specified as individual character string arguments,
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
36 ## a character array, or a cell array of character strings. When label names
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
37 ## might be confused with options to @code{legend}, the labels should be
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
38 ## protected by specifying them as a cell array of strings.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
39 ##
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
40 ## If the first argument @var{hax} is an axes handle, then add a legend to this
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
41 ## axes, rather than the current axes returned by @code{gca}.
17122
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 17119
diff changeset
42 ##
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
43 ## Legend labels are associated with the axes' children; The first label is
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
44 ## assigned to the first object that was plotted in the axes, the second label
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
45 ## to the next object plotted, etc. To label specific data objects, without
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
46 ## labeling all objects, provide their graphic handles in the input
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
47 ## @var{hobjs}.
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
48 ##
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
49 ## The optional parameter @var{pos} specifies the location of the legend as
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
50 ## follows:
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
51 ##
6977
e78e31f0a236 [project @ 2007-10-08 19:09:32 by jwe]
jwe
parents: 6895
diff changeset
52 ## @multitable @columnfractions 0.06 0.14 0.80
17204
d87179b38bcf doc: Touch up alignment of @multitables in plot, legend, newplot.
Rik <rik@octave.org>
parents: 17190
diff changeset
53 ## @headitem @tab pos @tab location of the legend
d87179b38bcf doc: Touch up alignment of @multitables in plot, legend, newplot.
Rik <rik@octave.org>
parents: 17190
diff changeset
54 ## @item @tab north @tab center top
d87179b38bcf doc: Touch up alignment of @multitables in plot, legend, newplot.
Rik <rik@octave.org>
parents: 17190
diff changeset
55 ## @item @tab south @tab center bottom
d87179b38bcf doc: Touch up alignment of @multitables in plot, legend, newplot.
Rik <rik@octave.org>
parents: 17190
diff changeset
56 ## @item @tab east @tab right center
d87179b38bcf doc: Touch up alignment of @multitables in plot, legend, newplot.
Rik <rik@octave.org>
parents: 17190
diff changeset
57 ## @item @tab west @tab left center
d87179b38bcf doc: Touch up alignment of @multitables in plot, legend, newplot.
Rik <rik@octave.org>
parents: 17190
diff changeset
58 ## @item @tab northeast @tab right top (default)
d87179b38bcf doc: Touch up alignment of @multitables in plot, legend, newplot.
Rik <rik@octave.org>
parents: 17190
diff changeset
59 ## @item @tab northwest @tab left top
d87179b38bcf doc: Touch up alignment of @multitables in plot, legend, newplot.
Rik <rik@octave.org>
parents: 17190
diff changeset
60 ## @item @tab southeast @tab right bottom
d87179b38bcf doc: Touch up alignment of @multitables in plot, legend, newplot.
Rik <rik@octave.org>
parents: 17190
diff changeset
61 ## @item @tab southwest @tab left bottom
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
62 ## @sp 1
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
63 ## @item @tab outside @tab can be appended to any location string @*
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
64 ## @item @tab @tab which will place the legend outside the axes
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
65 ## @end multitable
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
66 ##
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
67 ## The optional parameter @var{orient} determines if the legend elements are
20173
777f26aa8e3e doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19880
diff changeset
68 ## placed vertically or horizontally. The allowed values are
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17204
diff changeset
69 ## @qcode{"vertical"} (default) or @qcode{"horizontal"}.
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
70 ##
10666
7a43499f074a legend.m: Improve documentation string
Rik <octave@nomad.inbox5.com>
parents: 10662
diff changeset
71 ## The following customizations are available using @var{option}:
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
72 ##
7148
735086cfd405 [project @ 2007-11-09 18:01:44 by jwe]
jwe
parents: 7054
diff changeset
73 ## @table @asis
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17204
diff changeset
74 ## @item @qcode{"show"}
10666
7a43499f074a legend.m: Improve documentation string
Rik <octave@nomad.inbox5.com>
parents: 10662
diff changeset
75 ## Show legend on the plot
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10666
diff changeset
76 ##
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17204
diff changeset
77 ## @item @qcode{"hide"}
10666
7a43499f074a legend.m: Improve documentation string
Rik <octave@nomad.inbox5.com>
parents: 10662
diff changeset
78 ## Hide legend on the plot
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10666
diff changeset
79 ##
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17204
diff changeset
80 ## @item @qcode{"toggle"}
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
81 ## Toggle between @qcode{"hide"} and @qcode{"show"}
12394
c2e1973d870b legend.m: "legend off" should delete the legend object.
Ben Abbott <bpabbott@mac.com>
parents: 12388
diff changeset
82 ##
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17204
diff changeset
83 ## @item @qcode{"boxon"}
17532
492d609d2d75 legend.m: Default text labels to "right" alignment for Matlab compatibility.
Rik <rik@octave.org>
parents: 17530
diff changeset
84 ## Show a box around legend (default)
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10666
diff changeset
85 ##
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17204
diff changeset
86 ## @item @qcode{"boxoff"}
10666
7a43499f074a legend.m: Improve documentation string
Rik <octave@nomad.inbox5.com>
parents: 10662
diff changeset
87 ## Hide the box around legend
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10666
diff changeset
88 ##
17532
492d609d2d75 legend.m: Default text labels to "right" alignment for Matlab compatibility.
Rik <rik@octave.org>
parents: 17530
diff changeset
89 ## @item @qcode{"right"}
492d609d2d75 legend.m: Default text labels to "right" alignment for Matlab compatibility.
Rik <rik@octave.org>
parents: 17530
diff changeset
90 ## Place label text to the right of the keys (default)
492d609d2d75 legend.m: Default text labels to "right" alignment for Matlab compatibility.
Rik <rik@octave.org>
parents: 17530
diff changeset
91 ##
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17204
diff changeset
92 ## @item @qcode{"left"}
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
93 ## Place label text to the left of the keys
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10666
diff changeset
94 ##
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 17204
diff changeset
95 ## @item @qcode{"off"}
12394
c2e1973d870b legend.m: "legend off" should delete the legend object.
Ben Abbott <bpabbott@mac.com>
parents: 12388
diff changeset
96 ## Delete the legend object
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
97 ## @end table
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
98 ##
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
99 ## The @code{legend} function creates a graphics object which has various
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
100 ## properties that can be manipulated with @code{get}/@code{set}.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
101 ## Alternatively, properties can be set directly when calling @code{legend} by
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
102 ## including @var{property}/@var{value} pairs. If using this calling form, the
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
103 ## labels must be specified as a cell array of strings.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
104 ##
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
105 ## The optional output values are
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
106 ##
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
107 ## @table @var
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
108 ## @item hleg
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
109 ## The graphics handle of the legend object.
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
110 ##
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
111 ## @item hleg_obj
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
112 ## Graphics handles to the text, patch, and line objects which form the
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
113 ## legend.
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
114 ##
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
115 ## @item hplot
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
116 ## Graphics handles to the plot objects which were used in making the legend.
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
117 ##
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
118 ## @item labels
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
119 ## A cell array of strings of the labels in the legend.
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
120 ## @end table
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
121 ##
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
122 ## Implementation Note: The legend label text is either provided in the call to
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
123 ## @code{legend} or is taken from the @code{DisplayName} property of the
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
124 ## graphics objects. Only data objects, such as line, patch, and surface, have
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
125 ## this property whereas axes, figures, etc.@: do not so they are never present
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
126 ## in a legend. If no labels or @code{DisplayName} properties are available,
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
127 ## then the label text is simply @qcode{"data1"}, @qcode{"data2"}, @dots{},
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
128 ## @nospell{@qcode{"dataN"}}. No more than 20 data labels will be
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
129 ## automatically generated. To label more, call @code{legend} explicitly and
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
130 ## provide all labels.
17122
eaab03308c0b doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents: 17119
diff changeset
131 ##
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
132 ## The legend @code{FontSize} property is initially set to 90% of the axes
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
133 ## @code{FontSize} to which it is attached. Use @code{set} to override this
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
134 ## if necessary.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
135 ##
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
136 ## A legend is implemented as an additional axes object of the current figure
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
137 ## with the @code{tag} property set to @qcode{"legend"}. Properties of the
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
138 ## legend object may be manipulated directly by using @code{set}.
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
139 ## @end deftypefn
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
140
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
141 function [hleg, hleg_obj, hplot, labels] = legend (varargin)
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
142
11246
c463aed850b0 allow legend and gcf to work when no figure is present
John W. Eaton <jwe@octave.org>
parents: 11200
diff changeset
143 if (nargin > 0
24423
1d52db450db4 Change ishandle to return true for Java objects for Matlab compatibility.
Rik <rik@octave.org>
parents: 24403
diff changeset
144 && (! ishghandle (varargin{1})
11246
c463aed850b0 allow legend and gcf to work when no figure is present
John W. Eaton <jwe@octave.org>
parents: 11200
diff changeset
145 || (strcmp (get (varargin{1}, "type"), "axes")
c463aed850b0 allow legend and gcf to work when no figure is present
John W. Eaton <jwe@octave.org>
parents: 11200
diff changeset
146 && ! strcmp (get (varargin{1}, "tag"), "legend"))))
17065
991e8a386aa3 legend.m: Update to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents: 16973
diff changeset
147 [ca, varargin, nargin] = __plt_get_axis_arg__ ("legend", varargin{:});
991e8a386aa3 legend.m: Update to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents: 16973
diff changeset
148 if (isempty (ca))
991e8a386aa3 legend.m: Update to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents: 16973
diff changeset
149 ca = gca ();
991e8a386aa3 legend.m: Update to use new __plt_get_axis_arg__.
Rik <rik@octave.org>
parents: 16973
diff changeset
150 endif
19880
f25fe5369022 Don't assume axes parent is a figure (bug #44394)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 19833
diff changeset
151 fig = ancestor (ca, "figure");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
152 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
153 fig = get (0, "currentfigure");
11246
c463aed850b0 allow legend and gcf to work when no figure is present
John W. Eaton <jwe@octave.org>
parents: 11200
diff changeset
154 if (isempty (fig))
c463aed850b0 allow legend and gcf to work when no figure is present
John W. Eaton <jwe@octave.org>
parents: 11200
diff changeset
155 fig = gcf ();
c463aed850b0 allow legend and gcf to work when no figure is present
John W. Eaton <jwe@octave.org>
parents: 11200
diff changeset
156 endif
c463aed850b0 allow legend and gcf to work when no figure is present
John W. Eaton <jwe@octave.org>
parents: 11200
diff changeset
157 ca = gca ();
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
158 endif
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
159
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
160 ## Special handling for plotyy which has two axes objects
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
161 if (isprop (ca, "__plotyy_axes__"))
13216
434e227b100b Improvements to plotyy.
Ben Abbott <bpabbott@mac.com>
parents: 13141
diff changeset
162 plty = get (ca, "__plotyy_axes__");
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
163 if (! all (ishghandle (plty)))
21751
b571fc85953f maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents: 21652
diff changeset
164 error ("legend.m: This should not happen. File a bug report.");
11199
91c606a68693 minor fix to previous changeset
David Bateman <dbateman@free.fr>
parents: 11198
diff changeset
165 endif
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
166 ca = [ca, plty.'];
13216
434e227b100b Improvements to plotyy.
Ben Abbott <bpabbott@mac.com>
parents: 13141
diff changeset
167 ## Remove duplicates while preserving order
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
168 [~, n] = unique (ca, "first");
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
169 ca = ca(sort (n));
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
170 endif
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
171
24423
1d52db450db4 Change ishandle to return true for Java objects for Matlab compatibility.
Rik <rik@octave.org>
parents: 24403
diff changeset
172 if (nargin > 0 && all (ishghandle (varargin{1})))
10662
3afcd24ced61 legend.m: Key labels for specified objects.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
173 kids = flipud (varargin{1}(:));
3afcd24ced61 legend.m: Key labels for specified objects.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
174 varargin(1) = [];
3afcd24ced61 legend.m: Key labels for specified objects.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
175 else
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
176 kids = ca;
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
177 kids(strcmp (get (ca, "tag"), "legend")) = [];
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
178 if (isscalar (kids))
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
179 kids = get (kids, "children")(:);
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
180 else
23257
61ec2557eece Fix order of legend labels with plotyy axes (bug #50497)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 23253
diff changeset
181 kids = vertcat (flipud (get (kids, "children")){:});
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
182 endif
10662
3afcd24ced61 legend.m: Key labels for specified objects.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
183 endif
11246
c463aed850b0 allow legend and gcf to work when no figure is present
John W. Eaton <jwe@octave.org>
parents: 11200
diff changeset
184 nargs = numel (varargin);
10662
3afcd24ced61 legend.m: Key labels for specified objects.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
185 nkids = numel (kids);
3afcd24ced61 legend.m: Key labels for specified objects.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
186
18734
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
187 ## Find any existing legend object on figure
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
188 hlegend = [];
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
189 fkids = get (fig, "children");
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
190 for i = 1 : numel (fkids)
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
191 if ( strcmp (get (fkids(i), "type"), "axes")
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
192 && strcmp (get (fkids(i), "tag"), "legend"))
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
193 udata = get (fkids(i), "userdata");
18753
5f37573a6868 legend.m: Fix changing legend properties with handle for plotyy (bug #41970).
Rik <rik@octave.org>
parents: 18734
diff changeset
194 if (any (ismember (udata.handle, ca)))
18734
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
195 hlegend = fkids(i);
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
196 break;
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
197 endif
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
198 endif
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
199 endfor
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
200
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
201 orientation = "default";
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
202 location = "default";
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
203 show = "create";
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
204 textpos = "default";
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
205 box = "default";
18734
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
206 delete_leg = false;
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
207 find_leg_hdl = (nargs == 0); # possibly overridden
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
208 propvals = {};
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
209
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
210 ## Process old way of specifying location with a number rather than a string.
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
211 ## FIXME: When can this be deleted?
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
212 if (nargs > 0)
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
213 pos = varargin{nargs};
13279
984359717d71 Use common code idiom for checking whether a double value is an integer.
Rik <octave@nomad.inbox5.com>
parents: 13216
diff changeset
214 if (isnumeric (pos) && isscalar (pos) && pos == fix (pos))
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6272
diff changeset
215 if (pos >= -1 && pos <= 4)
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
216 location = [{"northeastoutside", "best", "northeast",
11003
b1cfff739af5 legend.m: Index location cellstr to obtain a string.
Ben Abbott <bpabbott@mac.com>
parents: 10999
diff changeset
217 "northwest", "southwest", "southeast"}] {pos + 2};
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
218 varargin(nargs) = [];
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
219 nargs -= 1;
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
220 else
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
221 error ("legend: invalid location specified");
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
222 endif
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
223 endif
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
224 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11563
diff changeset
225
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
226 ## Find "location" and "orientation" property/value pairs
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
227 while (nargs > 1)
6977
e78e31f0a236 [project @ 2007-10-08 19:09:32 by jwe]
jwe
parents: 6895
diff changeset
228 pos = varargin{nargs-1};
7054
1c5b2b5b58ba [project @ 2007-10-23 23:22:16 by jwe]
jwe
parents: 7017
diff changeset
229 str = varargin{nargs};
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
230 if (strcmpi (pos, "location") && ischar (str))
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
231 location = lower (str);
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
232 varargin(nargs-1:nargs) = [];
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
233 nargs -= 2;
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
234 elseif (strcmpi (pos, "orientation") && ischar (str))
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
235 orientation = lower (str);
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
236 varargin(nargs-1:nargs) = [];
10989
6ea65c5de87a Respect the units and paperunits figure properties and the units and fontunits axes properties
David Bateman <dbateman@free.fr>
parents: 10949
diff changeset
237 nargs -= 2;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
238 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
239 break;
6977
e78e31f0a236 [project @ 2007-10-08 19:09:32 by jwe]
jwe
parents: 6895
diff changeset
240 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
241 endwhile
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
242
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11563
diff changeset
243 ## Validate the orientation
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
244 switch (orientation)
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
245 case {"vertical", "horizontal", "default"}
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
246 ## These are all accepted orientations.
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
247 otherwise
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
248 error ("legend: unrecognized legend orientation");
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
249 endswitch
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
250
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
251 ## Validate the location type
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
252 outside = false;
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
253 inout = strfind (location, "outside");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
254 if (! isempty (inout))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
255 outside = true;
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
256 location = location(1:inout-1);
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
257 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
258 outside = false;
6977
e78e31f0a236 [project @ 2007-10-08 19:09:32 by jwe]
jwe
parents: 6895
diff changeset
259 endif
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
260
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
261 switch (location)
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
262 case {"north", "south", "east", "west", "northeast", "northwest", ...
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
263 "southeast", "southwest", "default"}
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
264 case "best"
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
265 warning ("legend: 'best' not yet implemented for location specifier\n");
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
266 location = "northeast";
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
267 case "none"
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
268 ## FIXME: Should there be any more error checking on this?
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
269 otherwise
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
270 error ("legend: unrecognized legend location");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
271 endswitch
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
272
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
273 ## Finish input processing based on number of inputs
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
274 if (nargs == 0)
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
275 ## No labels given, create a new legend or return existing one
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
276 if (isempty (hlegend))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
277 show = "create";
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
278 textpos = "right";
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
279 find_leg_hdl = false;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
280 endif
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
281
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
282 elseif (nargs == 1)
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
283 ## Either OPTION value, single string label, or cellstr of labels.
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
284 arg = varargin{1};
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
285 if (ischar (arg))
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
286 if (rows (arg) == 1)
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
287 str = lower (strtrim (arg));
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
288 switch (str)
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
289 case "off"
18734
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
290 delete_leg = true;
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
291 case "hide"
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
292 show = "off";
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
293 nargs -= 1;
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
294 case "show"
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
295 if (! isempty (hlegend))
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
296 show = "on";
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
297 else
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
298 show = "create";
17532
492d609d2d75 legend.m: Default text labels to "right" alignment for Matlab compatibility.
Rik <rik@octave.org>
parents: 17530
diff changeset
299 textpos = "right";
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
300 endif
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
301 nargs -= 1;
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
302 case "toggle"
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
303 if (isempty (hlegend))
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
304 show = "create";
17532
492d609d2d75 legend.m: Default text labels to "right" alignment for Matlab compatibility.
Rik <rik@octave.org>
parents: 17530
diff changeset
305 textpos = "right";
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
306 elseif (strcmp (get (hlegend, "visible"), "off"))
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
307 show = "on";
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
308 else
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
309 show = "off";
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
310 endif
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
311 nargs -= 1;
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
312 case "boxon"
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
313 box = "on";
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
314 nargs -= 1;
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
315 case "boxoff"
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
316 box = "off";
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
317 nargs -= 1;
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
318 case "left"
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
319 textpos = "left";
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
320 nargs -= 1;
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
321 case "right"
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
322 textpos = "right";
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
323 nargs -= 1;
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
324 endswitch
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
325 else
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
326 ## Character matrix of labels
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
327 varargin = cellstr (arg);
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9457
diff changeset
328 nargs = numel (varargin);
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
329 endif
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
330 elseif (iscellstr (arg))
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
331 ## Cell array of labels
8529
774b44619c5c Fix legend order for both horizontal and vertical string cell.
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 8343
diff changeset
332 varargin = arg;
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
333 nargs = numel (varargin);
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
334 else
20711
7b608fadc663 Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents: 20408
diff changeset
335 error ("legend: single argument must be a string or cellstr");
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
336 endif
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
337
14589
fd6e50e2eee6 legend() should accept labels being specified as both cellstrs and char.
Ben Abbott <bpabbott@mac.com>
parents: 14585
diff changeset
338 elseif (nargs > 1 && iscellstr (varargin{1}))
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
339 ## Cell array of labels followed by property/value pairs
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
340 propvals = varargin(2:end);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
341 if (rem (numel (propvals), 2) != 0)
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
342 error ("legend: PROPERTY/VALUE arguments must occur in pairs");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
343 endif
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
344 varargin = {varargin{1}{:}};
14589
fd6e50e2eee6 legend() should accept labels being specified as both cellstrs and char.
Ben Abbott <bpabbott@mac.com>
parents: 14585
diff changeset
345 nargs = numel (varargin);
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
346 endif
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
347
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
348 have_labels = (nargs > 0);
18734
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
349 hobjects = [];
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
350 hplots = [];
18734
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
351 text_strings = {};
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
352
18734
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
353 if (delete_leg)
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
354 delete (hlegend);
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
355 hlegend = [];
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
356 elseif (find_leg_hdl)
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
357 ## Don't change anything about legend.
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
358 ## hleg output will be assigned hlegend value at end of function.
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
359 elseif (strcmp (show, "off"))
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
360 if (! isempty (hlegend))
21898
b5313b6cbe72 Simplify handling of 'box' property for legend axes objects.
Rik <rik@octave.org>
parents: 21758
diff changeset
361 set (hlegend, "visible", "off");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
362 hlegend = [];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
363 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
364 elseif (strcmp (show, "on"))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
365 if (! isempty (hlegend))
21898
b5313b6cbe72 Simplify handling of 'box' property for legend axes objects.
Rik <rik@octave.org>
parents: 21758
diff changeset
366 set (hlegend, "visible", "on");
b5313b6cbe72 Simplify handling of 'box' property for legend axes objects.
Rik <rik@octave.org>
parents: 21758
diff changeset
367 ## NOTE: Matlab sets both "visible" and "box" to "on" for "show on"
b5313b6cbe72 Simplify handling of 'box' property for legend axes objects.
Rik <rik@octave.org>
parents: 21758
diff changeset
368 ## set (hlegend, "box", "on");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
369 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
370 elseif (strcmp (box, "on"))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
371 if (! isempty (hlegend))
21898
b5313b6cbe72 Simplify handling of 'box' property for legend axes objects.
Rik <rik@octave.org>
parents: 21758
diff changeset
372 set (hlegend, "box", "on");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
373 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
374 elseif (strcmp (box, "off"))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
375 if (! isempty (hlegend))
21898
b5313b6cbe72 Simplify handling of 'box' property for legend axes objects.
Rik <rik@octave.org>
parents: 21758
diff changeset
376 set (hlegend, "box", "off");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
377 endif
18734
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
378 elseif (! have_labels && ! isempty (hlegend)
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
379 && ! (strcmp (location, "default")
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
380 && strcmp (orientation, "default")))
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
381 ## Changing location or orientation of existing legend
18734
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
382 if (strcmp (location, "default"))
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
383 set (hlegend, "orientation", orientation);
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
384 elseif (strcmp (orientation, "default"))
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
385 if (outside)
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
386 set (hlegend, "location", [location "outside"]);
12398
735e43b75e45 Allow the legend location and orientation to be set without modifying the legend keys (#32374)
David Bateman <dbateman@free.fr>
parents: 12396
diff changeset
387 else
18734
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
388 set (hlegend, "location", location);
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
389 endif
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
390 else
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
391 if (outside)
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
392 set (hlegend, "location", [location "outside"],
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
393 "orientation", orientation);
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
394 else
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
395 set (hlegend, "location", location,
adb948d7fae4 legend.m: Don't create legend for some inputs for Matlab compatibility (bug #42034)
Rik <rik@octave.org>
parents: 18647
diff changeset
396 "orientation", orientation);
12398
735e43b75e45 Allow the legend location and orientation to be set without modifying the legend keys (#32374)
David Bateman <dbateman@free.fr>
parents: 12396
diff changeset
397 endif
735e43b75e45 Allow the legend location and orientation to be set without modifying the legend keys (#32374)
David Bateman <dbateman@free.fr>
parents: 12396
diff changeset
398 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
399 else
24403
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
400 ## Create or modify legend object
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
401 hobjects = [];
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
402 hplots = [];
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
403 text_strings = {};
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
404
24403
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
405 if (! isempty (hlegend))
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
406 ## Disable callbacks while modifying an existing legend
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
407 legdata = get (hlegend, "userdata");
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
408 legdata.nocallbacks = true;
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
409 set (hlegend, "userdata", legdata);
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
410 endif
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
411
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
412 if (have_labels)
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
413 ## Check for valid data that can be labeled.
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
414 have_data = false;
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
415 have_dname = false;
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
416 for hkid = kids.'
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
417 typ = get (hkid, "type");
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
418 if (any (strcmp (typ, {"line", "patch", "surface", "hggroup"})))
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
419 have_data = true;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
420 break;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
421 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
422 endfor
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
423
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
424 if (! have_data)
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
425 warning ("legend: plot data is empty; setting key labels has no effect");
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
426 endif
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
427 else
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
428 ## No labels. Search for DisplayName property.
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
429 have_dname = false;
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
430 n_dname = 0;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
431 for hkid = kids.'
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
432 typ = get (hkid, "type");
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
433 if (any (strcmp (typ, {"line", "patch", "surface", "hggroup"})))
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
434 n_dname += 1; # count of objects which could be labeled
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
435 if (! isempty (get (hkid, "displayname")))
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
436 have_dname = true;
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
437 break;
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
438 endif
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
439 endif
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
440 endfor
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
441 have_data = n_dname > 0;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
442 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
443
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
444 if (have_labels || ! have_dname)
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
445 k = nkids;
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
446 if (! have_labels)
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
447 ## No labels or DisplayName. Create set of "dataX" labels.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
448 if (n_dname > 20)
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
449 warning ("legend: labeling only first 20 data objects");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
450 n_dname = 20;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
451 endif
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
452 nargs = n_dname;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
453 varargin = arrayfun (@(x) sprintf ("data%d", x), [1:nargs]',
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
454 "uniformoutput", false);
16795
38c1a421f082 When no keys are specified and defaults are populated, set have_labels = true.
Ben Abbott <bpabbott@mac.com>
parents: 16728
diff changeset
455 have_labels = true;
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
456 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
457 for i = 1 : nargs
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
458 label = varargin{i};
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
459 if (! ischar (label))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
460 error ("legend: expecting label to be a string");
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
461 endif
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
462 ## Locate an object which can be labeled
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
463 while (k > 0)
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
464 typ = get (kids(k), "type");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
465 if (any (strcmp (typ, {"line","patch","surface","hggroup"})))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
466 break;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
467 endif
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
468 k--;
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
469 endwhile
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
470 if (k > 0)
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
471 set (kids(k), "displayname", label);
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
472 hplots(end+1) = kids(k);
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
473 text_strings(end+1) = label;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
474 k--;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
475 else
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
476 if (have_data)
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
477 warning ("legend: ignoring extra labels");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
478 endif
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
479 break; # k = 0, no further handles to process
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
480 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
481 endfor
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
482
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
483 else
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
484 ## No labels specified but objects have DisplayName property set.
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
485 k = nkids;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
486 while (k > 0)
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
487 ## Locate object to label
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
488 while (k > 0)
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
489 typ = get (kids(k), "type");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
490 if (any (strcmp (typ, {"line","patch","surface","hggroup"})))
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
491 break;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
492 endif
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
493 k--;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
494 endwhile
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
495 if (k > 0)
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
496 dname = get (kids(k), "displayname");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
497 if (! isempty (dname))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
498 hplots(end+1) = kids(k);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
499 text_strings(end+1) = dname;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
500 endif
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
501 k--;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
502 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
503 endwhile
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
504 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
505
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
506 if (isempty (hplots))
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
507 ## Nothing to label
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
508 if (! isempty (hlegend))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
509 fkids = get (fig, "children");
16800
56102c33122d Fix problems with changeset 286904321282.
Ben Abbott <bpabbott@mac.com>
parents: 16799
diff changeset
510 delete (fkids(fkids == hlegend));
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
511 hlegend = [];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
512 hobjects = [];
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
513 hplots = [];
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
514 text_strings = {};
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
515 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
516 else
14578
f579a94aacaa Preserve legend handle when changing properties (Bug # 36259).
Carnë Draug <carandraug+dev@gmail.com>
parents: 14552
diff changeset
517 ## Preserve the old legend if it exists
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
518 if (! isempty (hlegend))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
519 if (strcmp (textpos, "default"))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
520 textpos = get (hlegend, "textposition");
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
521 endif
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
522 if (strcmp (location, "default"))
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
523 location = get (hlegend, "location");
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
524 inout = strfind (location, "outside");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
525 if (! isempty (inout))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
526 outside = true;
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
527 location = location(1:inout-1);
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
528 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
529 outside = false;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
530 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
531 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
532 if (strcmp (orientation, "default"))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
533 orientation = get (hlegend, "orientation");
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
534 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
535 box = get (hlegend, "box");
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
536 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
537 if (strcmp (textpos, "default"))
17532
492d609d2d75 legend.m: Default text labels to "right" alignment for Matlab compatibility.
Rik <rik@octave.org>
parents: 17530
diff changeset
538 textpos = "right";
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
539 endif
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
540 if (strcmp (location, "default"))
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
541 location = "northeast";
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
542 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
543 if (strcmp (orientation, "default"))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
544 orientation = "vertical";
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
545 endif
14529
aabdc8f281f1 legend.m: Change default to boxon for Matlab compatibility (bug #36105).
Rik <octave@nomad.inbox5.com>
parents: 14375
diff changeset
546 box = "on";
6272
a1f3d3b7ee5c [project @ 2007-02-06 02:09:48 by jwe]
jwe
parents: 6257
diff changeset
547 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11563
diff changeset
548
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
549 ## Use axis which is appropriate for legend location.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
550 ## This is only necessary for plotyy figures where there are two axes.
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
551 if (numel (ca) == 1)
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
552 cax = ca(1);
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
553 elseif (strfind (location, "east"))
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
554 cax = ca(2);
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
555 else
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
556 cax = ca(1);
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
557 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11563
diff changeset
558 ## Get axis size and fontsize in points.
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
559 ## Rely on listener to handle conversion.
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
560 units = get (cax, "units");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
561 unwind_protect
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
562 set (cax, "units", "points");
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
563 set (cax, "fontunits", "points");
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
564 if (isempty (hlegend) || ! isprop (hlegend, "unmodified_axes_position"))
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
565 unmodified_axes_position = get (cax, "position");
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
566 unmodified_axes_outerposition = get (cax, "outerposition");
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
567 else
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
568 unmodified_axes_position = get (hlegend, "unmodified_axes_position");
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
569 unmodified_axes_outerposition = get (hlegend, ...
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
570 "unmodified_axes_outerposition");
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
571 endif
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
572 ca_pos = unmodified_axes_position;
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
573 ca_outpos = unmodified_axes_outerposition;
16910
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
574 tightinset = get (ca(1), "tightinset");
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
575 for i = 2 : numel (ca)
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
576 tightinset = max (tightinset, get (ca(i), "tightinset"));
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
577 endfor
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
578 unwind_protect_cleanup
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
579 set (cax, "units", units);
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
580 end_unwind_protect
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
581
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
582 ## Padding between legend entries horizontally and vertically
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
583 xpad = 2;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
584 ypad = 2;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
585
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
586 linelength = 15;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
587
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
588 ## Create the axes object first
18647
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
589 oldfig = get (0, "currentfigure");
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
590 if (oldfig != fig)
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
591 set (0, "currentfigure", fig);
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
592 else
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
593 oldfig = [];
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
594 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
595 curaxes = get (fig, "currentaxes");
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
596 unwind_protect
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
597 ud = ancestor (hplots, "axes");
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
598 if (! isscalar (ud))
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
599 ud = unique ([ud{:}]);
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
600 endif
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
601 if (isempty (hlegend))
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
602 ## Create a legend object (axes + new properties)
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
603 addprops = true;
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
604 hlegend = axes ("tag", "legend", "userdata", struct ("handle", ud),
12440
2ed62b9f949e synchronization of axes position and outerposition
Konstantinos Poulios <logari81@googlemail.com>
parents: 12437
diff changeset
605 "box", box,
14529
aabdc8f281f1 legend.m: Change default to boxon for Matlab compatibility (bug #36105).
Rik <octave@nomad.inbox5.com>
parents: 14375
diff changeset
606 "xtick", [], "ytick", [],
14578
f579a94aacaa Preserve legend handle when changing properties (Bug # 36259).
Carnë Draug <carandraug+dev@gmail.com>
parents: 14552
diff changeset
607 "xlim", [0, 1], "ylim", [0, 1],
20286
42b7d7758c4a Remove axes "interpreter" property (bug #45388)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20231
diff changeset
608 "activepositionproperty", "position");
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
609 ## Inherit fontsize from current axis
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
610 ## "fontunits" should be first because it affects interpretation
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
611 ## of "fontsize" property.
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
612 [fontunits, fontsz] = get (ca(1), {"fontunits", "fontsize"}){:};
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
613 fontsz *= 0.90; # Reduce legend fontsize to 90% of axes fontsize
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
614 set (hlegend, {"fontunits", "fontsize"}, {fontunits, fontsz});
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
615 set (hlegend, "fontunits", "points"); # legend always works in pts.
20408
71bd638e0ef6 legend.m: Fix listeners on legend line objects (bug #45563).
Rik <rik@octave.org>
parents: 20286
diff changeset
616 old_hplots = [];
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
617 else
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
618 ## Re-use existing legend.
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
619 addprops = false;
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
620 axes (hlegend);
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
621 delete (get (hlegend, "children"));
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
622 ## Hack: get list of hplots for which addlistener has been called.
20408
71bd638e0ef6 legend.m: Fix listeners on legend line objects (bug #45563).
Rik <rik@octave.org>
parents: 20286
diff changeset
623 old_hplots = [ get(hlegend, "deletefcn"){6:end} ];
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
624 endif
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
625
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
626 if (addprops)
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
627 ## Only required for a newly created legend object
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
628 addproperty ("autoupdate", hlegend, "radio", "{on}|off");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
629 addproperty ("edgecolor", hlegend, "color", [0.15, 0.15, 0.15]);
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
630 addproperty ("textcolor", hlegend, "color", [0, 0, 0]);
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
631 locations = {"north", "south", "east", "west", ...
17536
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
632 "{northeast}", "southeast", "northwest", "southwest", ...
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
633 "northoutside", "southoutside", ...
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
634 "eastoutside", "westoutside", ...
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
635 "northeastoutside", "southeastoutside", ...
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
636 "northwestoutside", "southwestoutside", "best", ...
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
637 "bestoutside", "none"};
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
638 addproperty ("location", hlegend, "radio", strjoin (locations, "|"));
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
639 addproperty ("orientation", hlegend, "radio",
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
640 "{vertical}|horizontal");
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
641 addproperty ("string", hlegend, "any", text_strings);
20286
42b7d7758c4a Remove axes "interpreter" property (bug #45388)
Pantxo Diribarne <pantxo.diribarne@gmail.com>
parents: 20231
diff changeset
642 addproperty ("interpreter", hlegend, "textinterpreter");
17536
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
643 addproperty ("textposition", hlegend, "radio", "left|{right}");
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
644 endif
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
645
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
646 ## Apply any PROPERTY/VALUE pairs given as arguments
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
647 if (! isempty (propvals))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
648 set (hlegend, propvals{:});
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
649 endif
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
650
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
651 ## Text objects in key inherit visual properties from legend object
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
652 legprops = { "fontunits", "fontangle", "fontname", "fontsize", ...
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
653 "fontweight", "interpreter", "textcolor" };
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
654
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
655 txtprops = { "fontunits", [], "fontangle", [] "fontname", [], ...
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
656 "fontsize", [], "fontweight", [] "interpreter", [], ...
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
657 "color", [] };
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
658 propvals = get (hlegend, legprops);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
659 txtprops(2:2:end) = propvals;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
660
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
661 ## Add text labels to the axes first and check their extents
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
662 nentries = numel (hplots);
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
663 texthandle = [];
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
664 maxwidth = maxheight = 0;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
665 for k = 1 : nentries
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
666 halign = ifelse (strcmp (textpos, "right"), "left", "right");
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
667 texthandle(k) = text (0, 0, text_strings{k},
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
668 "units", "points",
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
669 "horizontalalignment", halign,
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
670 txtprops{:},
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
671 "userdata", hplots(k));
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
672 extents = get (texthandle(k), "extent");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
673 maxwidth = max (maxwidth, extents(3));
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
674 maxheight = max (maxheight, extents(4));
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
675 endfor
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
676 ## Restore units which were force to points
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
677 set (texthandle, "units", get (0, "DefaultTextUnits"));
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
678
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
679 num1 = nentries;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
680 if (strcmp (orientation, "vertical"))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
681 height = nentries * (ypad + maxheight);
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
682 if (outside)
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
683 if (height > ca_pos(4))
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
684 ## Avoid shrinking the height of the axis to zero if outside
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
685 num1 = ca_pos(4) / (maxheight + ypad) / 2;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
686 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
687 else
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
688 if (height > 0.9 * ca_pos(4))
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
689 num1 = 0.9 * ca_pos(4) / (maxheight + ypad);
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
690 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
691 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
692 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
693 width = nentries * (ypad + maxwidth);
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
694 if (outside)
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
695 if (width > ca_pos(3))
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
696 ## Avoid shrinking the width of the axis to zero if outside
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
697 num1 = ca_pos(3) / (maxwidth + ypad) / 2;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
698 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
699 else
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
700 if (width > 0.9 * ca_pos(3))
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
701 num1 = 0.9 * ca_pos(3) / (maxwidth + ypad);
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
702 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
703 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
704 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
705 num2 = ceil (nentries / num1);
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
706
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
707 xstep = 3 * xpad + (maxwidth + linelength);
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
708 if (strcmp (textpos, "right"))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
709 xoffset = xpad;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
710 txoffset = 2 * xpad + linelength;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
711 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
712 xoffset = 2 * xpad + maxwidth;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
713 txoffset = xpad + maxwidth;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
714 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
715 ystep = (ypad + maxheight);
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
716 yoffset = ystep / 2;
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
717
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
718 ## Place the legend in the desired location
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
719 if (strcmp (orientation, "vertical"))
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
720 lpos = [0, 0, num2 * xstep, num1 * ystep];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
721 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
722 lpos = [0, 0, num1 * xstep, num2 * ystep];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
723 endif
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
724
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
725 gnuplot = strcmp (get (fig, "__graphics_toolkit__"), "gnuplot");
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
726 if (gnuplot)
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
727 ## gnuplot places the key (legend) at edge of the figure window.
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
728 ## OpenGL places the legend box at edge of the unmodified axes
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
729 ## position.
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
730 if (isempty (strfind (location, "east")))
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
731 gnuplot_offset = unmodified_axes_outerposition(1) ...
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
732 + unmodified_axes_outerposition(3) ...
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
733 - unmodified_axes_position(1) ...
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
734 - unmodified_axes_position(3);
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
735 else
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
736 gnuplot_offset = unmodified_axes_position(1) ...
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
737 - unmodified_axes_outerposition(1);
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
738 endif
17179
828e8852efa9 legend.m: Add %!demo block showing bug #39697.
Rik <rik@octave.org>
parents: 17174
diff changeset
739 ## FIXME: The "fontsize" is added to match the behavior of OpenGL.
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
740 ## This implies that a change in fontsize should trigger a listener
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
741 ## to update the legend. The "2" was determined using a long legend
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
742 ## key in the absence of any subplots.
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
743 gnuplot_offset -= 2 * get (hlegend, "fontsize");
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
744 else
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
745 gnuplot_offset = 0;
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
746 endif
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
747
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
748 ## For legend's outside the associated axes position,
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
749 ## align their edge to the unmodified_axes_outerposition,
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
750 ## and adjust the axes position accordingly.
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
751 switch (location)
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
752 case "north"
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
753 if (outside)
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
754 lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ...
12396
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
755 ca_outpos(2) + ca_outpos(4) - lpos(4) - ypad, lpos(3), ...
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
756 lpos(4)];
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
757
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
758 new_pos = [ca_pos(1), ca_pos(2), ca_pos(3), ca_pos(4) - lpos(4)];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
759 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
760 lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ...
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
761 ca_pos(2) + ca_pos(4) - lpos(4) - ypad, lpos(3), lpos(4)];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
762 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
763 case "south"
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
764 if (outside)
12396
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
765 lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ...
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
766 ca_outpos(2) + ypad, lpos(3), lpos(4)];
16910
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
767 new_pos = [ca_pos(1), lpos(2) + lpos(4) + 2 * ypad ...
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
768 + tightinset(2), ca_pos(3), ...
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
769 ca_pos(4) - lpos(4)];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
770 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
771 lpos = [ca_pos(1) + (ca_pos(3) - lpos(3)) / 2, ...
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
772 ca_pos(2) + ypad, lpos(3), lpos(4)];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
773 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
774 case "east"
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
775 if (outside)
12396
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
776 lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ...
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
777 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)];
16910
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
778 new_pos = [ca_pos(1), ca_pos(2), ...
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
779 lpos(1) - 2 * xpad - ca_pos(1) - tightinset(3), ...
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
780 ca_pos(4)];
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
781 new_pos(3) = new_pos(3) + gnuplot_offset;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
782 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
783 lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ...
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
784 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
785 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
786 case "west"
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
787 if (outside)
12396
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
788 lpos = [ca_outpos(1) + ypad, ...
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
789 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, ...
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
790 lpos(3), lpos(4)];
16910
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
791 new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ...
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
792 ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)];
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
793 new_pos(1) = new_pos(1) - gnuplot_offset;
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
794 new_pos(3) = new_pos(3) + gnuplot_offset;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
795 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
796 lpos = [ca_pos(1) + ypad, ...
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
797 ca_pos(2) + (ca_pos(4) - lpos(4)) / 2, lpos(3), lpos(4)];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
798 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
799 case "northeast"
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
800 if (outside)
12396
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
801 lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ...
12395
4d30b4136a3e legend.m: Align legends to plot box, add demo. Bug 32373.
Ben Abbott <bpabbott@mac.com>
parents: 12394
diff changeset
802 ca_pos(2) + ca_pos(4) - lpos(4), lpos(3), lpos(4)];
16910
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
803 new_pos = [ca_pos(1), ca_pos(2), ...
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
804 lpos(1) - 2 * xpad - tightinset(3) - ca_pos(1), ...
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
805 ca_pos(4)];
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
806 new_pos(3) = new_pos(3) + gnuplot_offset;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
807 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
808 lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ...
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
809 ca_pos(2) + ca_pos(4) - lpos(4) - ypad, lpos(3), lpos(4)];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
810 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
811 case "northwest"
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
812 if (outside)
12396
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
813 lpos = [ca_outpos(1) + ypad , ca_pos(2) + ca_pos(4) - lpos(4), ...
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
814 lpos(3), lpos(4)];
16910
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
815 new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ...
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
816 ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)];
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
817 new_pos(1) = new_pos(1) - gnuplot_offset;
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
818 new_pos(3) = new_pos(3) + gnuplot_offset;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
819 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
820 lpos = [ca_pos(1) + ypad, ...
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
821 ca_pos(2) + ca_pos(4) - lpos(4) - ypad, lpos(3), lpos(4)];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
822 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
823 case "southeast"
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
824 if (outside)
12396
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
825 lpos = [ca_outpos(1) + ca_outpos(3) - lpos(3) - ypad, ...
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
826 ca_pos(2), lpos(3), lpos(4)];
12395
4d30b4136a3e legend.m: Align legends to plot box, add demo. Bug 32373.
Ben Abbott <bpabbott@mac.com>
parents: 12394
diff changeset
827 new_pos = [ca_pos(1), ca_pos(2), ...
16910
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
828 lpos(1) - 2 * xpad - ca_pos(1) - tightinset(3), ...
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
829 ca_pos(4)];
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
830 new_pos(3) = new_pos(3) + gnuplot_offset;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
831 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
832 lpos = [ca_pos(1) + ca_pos(3) - lpos(3) - ypad, ...
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
833 ca_pos(2) + ypad, lpos(3), lpos(4)];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
834 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
835 case "southwest"
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
836 if (outside)
12396
6ba430a75553 Fix for legends with location southeastoutside and soutwestoutside. Pad legend position
David Bateman <dbateman@free.fr>
parents: 12395
diff changeset
837 lpos = [ca_outpos(1) + ypad, ca_pos(2), lpos(3), lpos(4)];
16910
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
838 new_pos = [lpos(1) + lpos(3) + 2 * xpad + tightinset(1), ...
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
839 ca_pos(2), ca_pos(3) - lpos(3) - 2 * xpad, ca_pos(4)];
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
840 new_pos(1) = new_pos(1) - gnuplot_offset;
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
841 new_pos(3) = new_pos(3) + gnuplot_offset;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
842 else
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
843 lpos = [ca_pos(1) + ypad, ca_pos(2) + ypad, lpos(3), lpos(4)];
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
844 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
845 endswitch
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
846
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
847 units = get (hlegend, "units");
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
848 unwind_protect
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
849 set (hlegend, "units", "points");
12440
2ed62b9f949e synchronization of axes position and outerposition
Konstantinos Poulios <logari81@googlemail.com>
parents: 12437
diff changeset
850 set (hlegend, "position", lpos);
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
851 unwind_protect_cleanup
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
852 set (hlegend, "units", units);
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
853 end_unwind_protect
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
854
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
855 ## Now write the line segments and place the text objects correctly
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
856 xk = yk = 0;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
857 for k = 1 : numel (hplots)
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
858 hobjects(end+1) = texthandle(k);
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
859 hplt = hplots(k);
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
860 typ = get (hplt, "type");
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
861 ## For an hggroup, find an underlying primitive object
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
862 if (strcmp (typ, "hggroup"))
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
863 for hgkid = get (hplt, "children").'
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
864 hgkid_type = get (hgkid, "type");
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
865 if (any (strcmp (hgkid_type, {"line","patch","surface"})))
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
866 typ = hgkid_type;
21937
55f7de37b618 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 21904
diff changeset
867 hplt = hgkid;
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
868 break;
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
869 endif
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
870 endfor
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
871 endif
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
872
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
873 switch (typ)
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
874
17174
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
875 case "line"
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
876 color = get (hplt, "color");
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
877 style = get (hplt, "linestyle");
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
878 lwidth = min (get (hplt, "linewidth"), 5);
17174
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
879 if (! strcmp (style, "none"))
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
880 l1 = line ("xdata", ([xoffset, xoffset + linelength] + xk * xstep) / lpos(3),
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
881 "ydata", [1, 1] .* (lpos(4) - yoffset - yk * ystep) / lpos(4),
18422
be3702a2eb8a legend.m: use linewidth from plot object in drawing legend (bug #41283)
Joachim Wiesemann <gnu@jwiesemann.com>
parents: 17885
diff changeset
882 "color", color, "linestyle", style, "linewidth", lwidth,
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
883 "marker", "none",
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
884 "userdata", hplt);
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
885 hobjects(end+1) = l1;
17174
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
886 endif
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
887 marker = get (hplt, "marker");
17174
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
888 if (! strcmp (marker, "none"))
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
889 l1 = line ("xdata", (xoffset + 0.5 * linelength + xk * xstep) / lpos(3),
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
890 "ydata", (lpos(4) - yoffset - yk * ystep) / lpos(4),
18422
be3702a2eb8a legend.m: use linewidth from plot object in drawing legend (bug #41283)
Joachim Wiesemann <gnu@jwiesemann.com>
parents: 17885
diff changeset
891 "color", color, "linestyle", "none", "linewidth", lwidth,
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
892 "marker", marker,
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
893 "markeredgecolor", get (hplt, "markeredgecolor"),
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
894 "markerfacecolor", get (hplt, "markerfacecolor"),
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
895 "markersize", min (get (hplt, "markersize"),10),
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
896 "userdata", hplt);
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
897 hobjects(end+1) = l1;
17174
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
898 endif
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
899
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
900 ## Newly labeled objects have listeners added
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
901 if (! any (hplt == old_hplots))
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
902 addlistener (hplt, "color",
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
903 {@cb_line_listener, hlegend, linelength, false});
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
904 addlistener (hplt, "linestyle",
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
905 {@cb_line_listener, hlegend, linelength, false});
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
906 addlistener (hplt, "linewidth",
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
907 {@cb_line_listener, hlegend, linelength, false});
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
908 addlistener (hplt, "marker",
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
909 {@cb_line_listener, hlegend, linelength, false});
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
910 addlistener (hplt, "markeredgecolor",
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
911 {@cb_line_listener, hlegend, linelength, false});
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
912 addlistener (hplt, "markerfacecolor",
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
913 {@cb_line_listener, hlegend, linelength, false});
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
914 addlistener (hplt, "markersize",
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
915 {@cb_line_listener, hlegend, linelength, false});
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
916 addlistener (hplt, "displayname",
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
917 {@cb_line_listener, hlegend, linelength, true});
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
918 endif
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
919
17174
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
920 case "patch"
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
921 facecolor = get (hplt, "facecolor");
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
922 edgecolor = get (hplt, "edgecolor");
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
923 cdata = get (hplt, "cdata");
17174
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
924 if (! strcmp (facecolor, "none") || ! strcmp (edgecolor, "none"))
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
925 p1 = patch ("xdata", ([0, linelength, linelength, 0] +
17536
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
926 xoffset + xk * xstep) / lpos(3),
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
927 "ydata", (lpos(4) - yoffset -
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
928 [yk-0.3, yk-0.3, yk+0.3, yk+0.3] .* ystep) / lpos(4),
18564
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
929 "facecolor", facecolor, "edgecolor", edgecolor,
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
930 "cdata", cdata, "userdata", hplt);
18564
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
931 else
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
932 ## non-standard patch only making use of marker styles
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
933 ## such as scatter plot.
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
934 p1 = patch ("xdata", (xoffset + 0.5 * linelength + xk * xstep) / lpos(3),
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
935 "ydata", (lpos(4) - yoffset - yk * ystep) / lpos(4),
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
936 "marker", get (hplt, "marker"),
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
937 "markeredgecolor",get (hplt,"markeredgecolor"),
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
938 "markerfacecolor",get (hplt,"markerfacecolor"),
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
939 "markersize", min (get (hplt,"markersize"),10),
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
940 "cdata", cdata, "userdata", hplt);
17174
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
941 endif
18564
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
942 hobjects(end+1) = p1;
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
943 ## Copy clim from axes so that colors work out.
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
944 set (hlegend, "clim", get (ca(1), "clim"));
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
945
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
946 ## FIXME: Need listeners, as for line objects.
17730
580990c2ce04 legend.m: Fix legend color for bar graphs (bug #40327)
Rik <rik@octave.org>
parents: 17677
diff changeset
947 ## Changing clim, for example, won't update colors
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
948
17174
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
949 case "surface"
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
950 facecolor = get (hplt, "facecolor");
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
951 edgecolor = get (hplt, "edgecolor");
17560
225ec9a0222a legend.m: Use axis that legend refers to when calculating color for surface patch label.
Rik <rik@octave.org>
parents: 17540
diff changeset
952 cdata = sum (get (ca(1), "clim")) / 2;
17540
b7aa1d726bcc legend.m: Add support for surface objects.
Rik <rik@octave.org>
parents: 17538
diff changeset
953 if (! strcmp (facecolor, "none") || ! strcmp (edgecolor, "none"))
b7aa1d726bcc legend.m: Add support for surface objects.
Rik <rik@octave.org>
parents: 17538
diff changeset
954 p1 = patch ("xdata", ([0, linelength, linelength, 0] +
b7aa1d726bcc legend.m: Add support for surface objects.
Rik <rik@octave.org>
parents: 17538
diff changeset
955 xoffset + xk * xstep) / lpos(3),
b7aa1d726bcc legend.m: Add support for surface objects.
Rik <rik@octave.org>
parents: 17538
diff changeset
956 "ydata", (lpos(4) - yoffset -
b7aa1d726bcc legend.m: Add support for surface objects.
Rik <rik@octave.org>
parents: 17538
diff changeset
957 [yk-0.3, yk-0.3, yk+0.3, yk+0.3] .* ystep) / lpos(4),
18564
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
958 "facecolor", facecolor, "edgecolor", edgecolor,
21904
7aa8d9c28d2b legend.m: Return the correct third argument (h_plots) when plot has hggroups (bug #48210).
Rik <rik@octave.org>
parents: 21898
diff changeset
959 "cdata", cdata, "userdata", hplt);
17540
b7aa1d726bcc legend.m: Add support for surface objects.
Rik <rik@octave.org>
parents: 17538
diff changeset
960 hobjects(end+1) = p1;
b7aa1d726bcc legend.m: Add support for surface objects.
Rik <rik@octave.org>
parents: 17538
diff changeset
961 endif
18564
3a1a4d587c4e legend.m: Correctly create legend for scatter plots (bug #33463).
Rik <rik@octave.org>
parents: 18423
diff changeset
962 ## FIXME: Need listeners, as for line objects.
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
963
10999
9f45b76c16e3 legend.m: Treat line, patch, and surface objects differetly.
Ben Abbott <bpabbott@mac.com>
parents: 10995
diff changeset
964 endswitch
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
965
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
966 set (texthandle(k), "position",
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
967 [(txoffset + xk * xstep) / lpos(3), ...
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
968 (lpos(4) - yoffset - yk * ystep) / lpos(4)]);
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
969 if (strcmp (orientation, "vertical"))
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
970 yk += 1;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
971 if (yk > num1)
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
972 yk = 0;
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
973 xk += 1;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
974 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
975 else
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
976 xk += 1;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
977 if (xk > num1)
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
978 xk = 0;
20735
418ae0cb752f Replace ++,-- with in-place operators for performance.
Rik <rik@octave.org>
parents: 20711
diff changeset
979 yk += 1;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
980 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
981 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
982 endfor
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
983
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
984 ## Add an invisible text object to original axis
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
985 ## that, when it is destroyed, will remove the legend.
22054
55e2979e1fd1 legend.m: Don't use 'legend' tag for any non-axes, non-legend objects.
Rik <rik@octave.org>
parents: 21937
diff changeset
986 props = {"parent", ca(1), "tag", "deletelegend", ...
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
987 "visible", "off", "handlevisibility", "off", ...
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
988 "xliminclude", "off", "yliminclude", "off", ...
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
989 "zliminclude", "off"};
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
990 htdel = findall (ca(1), "tag", "deletelegend", "type", "text");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
991 if (isempty (htdel))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
992 htdel = text (0, 0, "", props{:});
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
993 set (htdel, "deletefcn", {@cb_axes_deleted, hlegend});
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
994 endif
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
995 if (isprop (hlegend, "unmodified_axes_position"))
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
996 set (hlegend, "unmodified_axes_position",
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
997 unmodified_axes_position,
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
998 "unmodified_axes_outerposition",
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
999 unmodified_axes_outerposition);
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1000 else
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1001 addproperty ("unmodified_axes_position", hlegend,
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1002 "data", unmodified_axes_position);
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1003 addproperty ("unmodified_axes_outerposition", hlegend,
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1004 "data", unmodified_axes_outerposition);
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1005 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1006
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1007 ## Resize the axis that the legend is attached to if the legend is
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1008 ## "outside" the plot and create a listener to resize axis to original
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1009 ## size if the legend is deleted, hidden, or shown.
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1010 if (outside)
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1011 for i = 1 : numel (ca)
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1012 units = get (ca(i), "units");
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1013 unwind_protect
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1014 set (ca(i), "units", "points");
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
1015 if (gnuplot && numel (ca) == 1)
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
1016 ## Let gnuplot handle the positioning of the keybox.
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
1017 ## This violates strict Matlab compatibility, but reliably
24335
8edaf9c80779 Fix legend placement for plotyy figures (bug #52547).
Rik <rik@octave.org>
parents: 23573
diff changeset
1018 ## renders an aesthetic result.
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
1019 set (ca(i), "position", unmodified_axes_position);
21385
89fa0694aa2e Fix check-missing-semicolon QA target (bug #47277).
Rik <rik@octave.org>
parents: 20852
diff changeset
1020 set (ca(i), "activepositionproperty", "outerposition");
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
1021 else
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
1022 ## numel (ca) > 1 for axes overlays (like plotyy)
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
1023 set (ca(i), "position", new_pos);
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
1024 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1025 unwind_protect_cleanup
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1026 set (ca(i), "units", units);
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1027 end_unwind_protect
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1028 endfor
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1029
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1030 set (hlegend, "deletefcn", {@cb_restore_axes, ca, ...
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1031 unmodified_axes_position, ...
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
1032 unmodified_axes_outerposition, ...
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1033 htdel, hplots});
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1034 addlistener (hlegend, "visible", {@cb_legend_hideshow, ca, ...
16909
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
1035 unmodified_axes_position, ...
8f9ed9d8a478 Allow gnuplot to handle keybox and axes positioning.
Ben Abbott <bpabbott@mac.com>
parents: 16908
diff changeset
1036 new_pos});
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1037 else
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1038 set (hlegend, "deletefcn", {@cb_restore_axes, ca, [], [], ...
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1039 htdel, hplots});
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1040 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1041
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
1042 if (! addprops)
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1043 ## Remove listeners on existing legend temporarily to stop recursion.
17536
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1044 dellistener (hlegend, "location");
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1045 dellistener (hlegend, "orientation");
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1046 dellistener (hlegend, "string");
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1047 dellistener (hlegend, "textposition");
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1048 endif
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1049
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1050 if (! addprops)
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1051 set (hlegend, "string", text_strings);
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1052 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1053
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1054 if (outside)
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
1055 set (hlegend, "location", [location "outside"],
17536
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1056 "orientation", orientation, "textposition", textpos);
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1057 else
16796
519343308ab1 Rename "position" variable to "location" in legend.m
Ben Abbott <bpabbott@mac.com>
parents: 16795
diff changeset
1058 set (hlegend, "location", location, "orientation", orientation,
17536
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1059 "textposition", textpos);
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1060 endif
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1061
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1062 if (addprops)
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1063 addlistener (hlegend, "edgecolor", @cb_legend_text_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1064 addlistener (hlegend, "fontangle", @cb_legend_text_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1065 addlistener (hlegend, "fontname", @cb_legend_text_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1066 addlistener (hlegend, "fontweight", @cb_legend_text_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1067 addlistener (hlegend, "textcolor", @cb_legend_text_update);
17536
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1068 ## Properties which could change size of box, such as fontsize,
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1069 ## require legend to be redrawn.
17885
1d109119ac71 legend.m: Don't add listener for 'fontsize' if using gnuplot.
Rik <rik@octave.org>
parents: 17744
diff changeset
1070 ## FIXME: fontsize is changed by print.m function during the
1d109119ac71 legend.m: Don't add listener for 'fontsize' if using gnuplot.
Rik <rik@octave.org>
parents: 17744
diff changeset
1071 ## production of a plot for output. This screws things up
1d109119ac71 legend.m: Don't add listener for 'fontsize' if using gnuplot.
Rik <rik@octave.org>
parents: 17744
diff changeset
1072 ## because legend tries to return the axes size to what it
1d109119ac71 legend.m: Don't add listener for 'fontsize' if using gnuplot.
Rik <rik@octave.org>
parents: 17744
diff changeset
1073 ## was when the figure was created, versus what it is now
1d109119ac71 legend.m: Don't add listener for 'fontsize' if using gnuplot.
Rik <rik@octave.org>
parents: 17744
diff changeset
1074 ## when the figure is being printed. Temporary hack is
1d109119ac71 legend.m: Don't add listener for 'fontsize' if using gnuplot.
Rik <rik@octave.org>
parents: 17744
diff changeset
1075 ## good enough for generating the Octave manual which still
1d109119ac71 legend.m: Don't add listener for 'fontsize' if using gnuplot.
Rik <rik@octave.org>
parents: 17744
diff changeset
1076 ## relies on gnuplot for generating images. See bug #40333.
1d109119ac71 legend.m: Don't add listener for 'fontsize' if using gnuplot.
Rik <rik@octave.org>
parents: 17744
diff changeset
1077 if (! gnuplot)
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1078 addlistener (hlegend, "fontsize", @cb_legend_update);
17885
1d109119ac71 legend.m: Don't add listener for 'fontsize' if using gnuplot.
Rik <rik@octave.org>
parents: 17744
diff changeset
1079 endif
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1080 addlistener (hlegend, "fontunits", @cb_legend_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1081 addlistener (hlegend, "interpreter", @cb_legend_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1082 addlistener (hlegend, "location", @cb_legend_location);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1083 addlistener (hlegend, "orientation", @cb_legend_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1084 addlistener (hlegend, "string", @cb_legend_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1085 addlistener (hlegend, "textposition", @cb_legend_update);
17536
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1086 ## FIXME: need to add listeners for tightinset and position
16910
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
1087 ## addlistener (ca, "tightinset", @update????);
8a4e53cf79c9 Modify the plotbox position relative to the keybox position.
Ben Abbott <bpabbott@mac.com>
parents: 16909
diff changeset
1088 ## addlistener (ca, "position", @update????);
17536
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1089 else
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1090 ## Restore listeners temporarily disabled during reconstruction.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1091 addlistener (hlegend, "location", @cb_legend_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1092 addlistener (hlegend, "orientation", @cb_legend_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1093 addlistener (hlegend, "string", @cb_legend_update);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1094 addlistener (hlegend, "textposition", @cb_legend_update);
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1095 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1096 unwind_protect_cleanup
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1097 set (fig, "currentaxes", curaxes);
18647
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1098 if (! isempty (oldfig))
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1099 set (0, "currentfigure", oldfig);
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1100 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1101 end_unwind_protect
6272
a1f3d3b7ee5c [project @ 2007-02-06 02:09:48 by jwe]
jwe
parents: 6257
diff changeset
1102 endif
6147
e14b0e9b7bf7 [project @ 2006-11-09 03:28:01 by jwe]
jwe
parents: 6146
diff changeset
1103 endif
e14b0e9b7bf7 [project @ 2006-11-09 03:28:01 by jwe]
jwe
parents: 6146
diff changeset
1104
24403
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1105 ## Restore operation of callbacks
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1106 legdata = get (hlegend, "userdata");
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1107 legdata.nocallbacks = false;
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1108 set (hlegend, "userdata", legdata);
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1109
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1110 if (nargout > 0)
17503
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
1111 hleg = hlegend;
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
1112 hleg_obj = hobjects;
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
1113 hplot = hplots;
d99785217634 legend.m: Text objects should inherit textcolor, interpreter properties from legend (bug #40064).
Rik <rik@octave.org>
parents: 17281
diff changeset
1114 labels = text_strings;
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1115 endif
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1116
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1117 endfunction
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1118
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1119 ## A non-text property of legend has changed requiring an update.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1120 function cb_legend_update (hleg, ~)
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1121 persistent recursive = false;
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1122
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1123 if (! recursive)
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1124 recursive = true;
12339
eda5eabd5d0b Fix for inline legends (#32022, #32343)
David Bateman <dbateman@free.fr>
parents: 11587
diff changeset
1125 unwind_protect
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1126 hax = getfield (get (hleg, "userdata"), "handle");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1127 [hplots, ~] = __getlegenddata__ (hleg);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1128 position = get (hleg, "unmodified_axes_position");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1129 outerposition = get (hleg, "unmodified_axes_outerposition");
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1130 units = get (hax, "units");
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1131 set (hax, "units", "points");
16933
e39f00a32dc7 maint: Use parentheses around condition for switch(),while(),if() statements.
Rik <rik@octave.org>
parents: 16921
diff changeset
1132 switch (get (hax, "activepositionproperty"))
17174
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
1133 case "position"
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
1134 set (hax, "outerposition", outerposition);
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
1135 set (hax, "position", position);
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
1136 case "outerposition"
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
1137 set (hax, "position", position);
c3c1ebfaa7dc maint: Use common indentation for switch statement.
Rik <rik@octave.org>
parents: 17125
diff changeset
1138 set (hax, "outerposition", outerposition);
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1139 endswitch
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1140 if (isscalar (hax))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1141 set (hax, "units", units);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1142 else
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1143 set (hax, {"units"}, units);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1144 endif
18644
8c0646dd9e5a legend.m: Fix bug updating plotyy figures (bug #41970).
Rik <rik@octave.org>
parents: 18564
diff changeset
1145
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1146 hleg = legend (hax(1), hplots, get (hleg, "string"));
12339
eda5eabd5d0b Fix for inline legends (#32022, #32343)
David Bateman <dbateman@free.fr>
parents: 11587
diff changeset
1147 unwind_protect_cleanup
eda5eabd5d0b Fix for inline legends (#32022, #32343)
David Bateman <dbateman@free.fr>
parents: 11587
diff changeset
1148 recursive = false;
eda5eabd5d0b Fix for inline legends (#32022, #32343)
David Bateman <dbateman@free.fr>
parents: 11587
diff changeset
1149 end_unwind_protect
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1150 endif
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1151
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1152 endfunction
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1153
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1154 ## A text property of legend, such as fontname, has changed.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1155 function cb_legend_text_update (hleg, ~)
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21751
diff changeset
1156
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1157 kids = get (hleg, "children");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1158 htext = kids(strcmp (get (kids, "type"), "text"));
17533
bb7756dff055 legend.m: Add listeners for all font properties to update text labels.
Rik <rik@octave.org>
parents: 17532
diff changeset
1159
17536
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1160 tprops = {"fontangle", "fontname", "fontweight", "color"};
8a186cd5b9a6 legend.m: Updating of font properties which affect box size, now redraws correctly sized legend.
Rik <rik@octave.org>
parents: 17535
diff changeset
1161 lprops = {"fontangle", "fontname", "fontweight", "textcolor"};
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1162 set (htext, tprops, get (hleg, lprops));
17535
5eae41c8c07f legend.m: Add support for "edgecolor" property.
Rik <rik@octave.org>
parents: 17534
diff changeset
1163
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1164 ec = get (hleg, "edgecolor");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1165 set (hleg, "xcolor", ec, "ycolor", ec);
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21751
diff changeset
1166
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1167 endfunction
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1168
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1169 ## The legend "visible" property has changed.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1170 function cb_legend_hideshow (hleg, ~, ca, orig_pos, new_pos)
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21751
diff changeset
1171
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1172 isvisible = strcmp (get (hleg, "visible"), "on");
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1173
24426
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1174 ## FIXME: Can't use a single set() call because of linked axes and
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1175 ## listeners on plotyy graphs.
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1176 ca = ca(isaxes (ca));
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1177 for cax = ca(:).'
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1178 units = get (cax, "units");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1179 unwind_protect
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1180 set (cax, "units", "points");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1181 if (isvisible)
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1182 set (cax, "position", new_pos);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1183 else
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1184 set (cax, "position", orig_pos);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1185 endif
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1186 unwind_protect_cleanup
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1187 set (cax, "units", units);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1188 end_unwind_protect
10990
529b36293297 Backed out changeset 6ea65c5de87a
David Bateman <dbateman@free.fr>
parents: 10989
diff changeset
1189 endfor
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21751
diff changeset
1190
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1191 endfunction
10989
6ea65c5de87a Respect the units and paperunits figure properties and the units and fontunits axes properties
David Bateman <dbateman@free.fr>
parents: 10949
diff changeset
1192
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1193 ## The legend "location" property has changed.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1194 function cb_legend_location (hleg, d)
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1195
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1196 ## If it isn't "none", which means manual positioning, then rebuild .
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1197 if (! strcmp (get (hleg, "location"), "none"))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1198 cb_legend_update (hleg, d);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1199 endif
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1200
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1201 endfunction
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1202 ## Axes to which legend was attached has been deleted. Delete legend.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1203 function cb_axes_deleted (~, ~, hlegend)
24426
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1204 if (isaxes (hlegend))
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1205 set (hlegend, "deletefcn", []);
21652
2e07dcdc6139 legend.m: Check handle is valid before delete (partial fix bug #47699).
Rik <rik@octave.org>
parents: 21580
diff changeset
1206 delete (hlegend);
10989
6ea65c5de87a Respect the units and paperunits figure properties and the units and fontunits axes properties
David Bateman <dbateman@free.fr>
parents: 10949
diff changeset
1207 endif
10995
e81914f3921f Update legend code to support fltk (fixes #29348 and partially fixes #30461)
David Bateman <dbateman@free.fr>
parents: 10990
diff changeset
1208 endfunction
10989
6ea65c5de87a Respect the units and paperunits figure properties and the units and fontunits axes properties
David Bateman <dbateman@free.fr>
parents: 10949
diff changeset
1209
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1210 ## Restore position of axes object when legend is deleted.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1211 function cb_restore_axes (~, ~, ca, pos, outpos, htdel, hplots)
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21751
diff changeset
1212
24426
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1213 hf = ancestor (ca(1), "figure");
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1214 if (strcmp (get (hf, "beingdeleted"), "on") ||
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1215 strcmp (get (ca(1), "beingdeleted"), "on"))
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1216 ## Skip restoring axes if entire figure or axes is being destroyed.
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1217 return;
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1218 endif
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1219
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1220 ## Remove text object used to trigger legend delete when axes is deleted
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1221 if (ishghandle (htdel))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1222 set (htdel, "deletefcn", []);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1223 delete (htdel);
24426
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1224 endif
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1225
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1226 ## Restore original axes positions
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1227 if (! isempty (pos))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1228 ## FIXME: can't use single call to set() because of weirdness w/plotyy
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1229 for cax = ca(:).'
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1230 if (isaxes (cax))
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1231 units = get (cax, "units");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1232 unwind_protect
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1233 set (cax, "units", "points");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1234 set (cax, "position", pos);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1235 unwind_protect_cleanup
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1236 set (cax, "units", units);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1237 end_unwind_protect
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1238 endif
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1239 endfor
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1240 endif
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21751
diff changeset
1241
24426
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1242 ## Remove listeners from plot objects
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1243 for i = 1 : numel (hplots)
24426
a51497205f4c Change uses of gcbf after Matlab compatibility change in bug #52621.
Rik <rik@octave.org>
parents: 24423
diff changeset
1244 if (isgraphics (hplots(i), "line"))
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
1245 dellistener (hplots(i), "color");
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
1246 dellistener (hplots(i), "linestyle");
18422
be3702a2eb8a legend.m: use linewidth from plot object in drawing legend (bug #41283)
Joachim Wiesemann <gnu@jwiesemann.com>
parents: 17885
diff changeset
1247 dellistener (hplots(i), "linewidth");
15440
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
1248 dellistener (hplots(i), "marker");
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
1249 dellistener (hplots(i), "markeredgecolor");
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
1250 dellistener (hplots(i), "markerfacecolor");
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
1251 dellistener (hplots(i), "markersize");
1db706430c96 Fix legend ('show') to work with DisplayName (bug #33757)
Rik <rik@octave.org>
parents: 15202
diff changeset
1252 dellistener (hplots(i), "displayname");
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1253 endif
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1254 endfor
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21751
diff changeset
1255
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1256 endfunction
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1257
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1258 ## Update legend item because underlying plot line object has changed.
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1259 function cb_line_listener (h, ~, hlegend, linelength, update_name)
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1260
24403
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1261 ## Don't execute callbacks when legend is under construction
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1262 legdata = get (hlegend, "userdata");
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1263 if (legdata.nocallbacks)
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1264 return;
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1265 endif
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1266
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1267 if (update_name)
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1268 ## When string changes, have to rebuild legend completely
12339
eda5eabd5d0b Fix for inline legends (#32022, #32343)
David Bateman <dbateman@free.fr>
parents: 11587
diff changeset
1269 [hplots, text_strings] = __getlegenddata__ (hlegend);
24403
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1270 if (isempty (hplots))
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1271 delete (hlegend);
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1272 else
b9462090773a legend.m: Setting DisplayName to "" should delete legend (bug #52641).
Rik <rik@octave.org>
parents: 24399
diff changeset
1273 legend (legdata.handle, hplots, text_strings);
24398
a7dfb685d261 legend.m: Fix callback error when changing a legend string to "".
Rik <rik@octave.org>
parents: 23257
diff changeset
1274 endif
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1275 else
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1276 kids = get (hlegend, "children");
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1277 kids = kids([get(kids, "userdata"){:}] == h);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1278 kids = kids(strcmp (get (kids, "type"), "line"));
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1279 idx = strcmp (get (kids, "marker"), "none");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1280 ll = kids (idx);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1281 lm = kids (! idx);
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1282
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1283 [linestyle, marker, displayname] = ...
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1284 get (h, {"linestyle", "marker", "displayname"}){:};
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1285
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1286 if (! isempty (ll))
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1287 [xpos1, ypos1] = get (ll, {"xdata", "ydata"}){:};
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1288 xpos2 = sum (xpos1) / 2;
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1289 ypos2 = ypos1(1);
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1290 delete (ll);
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1291 if (! isempty (lm))
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1292 delete (lm);
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1293 endif
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1294 else
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1295 [xpos2, ypos2] = get (lm, {"xdata", "ydata"}){:};
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1296 xpos1 = xpos2 + [-0.5, 0.5] * linelength;
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1297 ypos1 = [ypos2, ypos2];
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1298 delete (lm);
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1299 endif
17537
4f57d4de0383 legend.m: Implement correct listener for DisplayName on line objects.
Rik <rik@octave.org>
parents: 17536
diff changeset
1300
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1301 if (! strcmp (linestyle, "none"))
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11563
diff changeset
1302 line ("xdata", xpos1, "ydata", ypos1, "color", get (h, "color"),
18422
be3702a2eb8a legend.m: use linewidth from plot object in drawing legend (bug #41283)
Joachim Wiesemann <gnu@jwiesemann.com>
parents: 17885
diff changeset
1303 "linestyle", get (h, "linestyle"),
be3702a2eb8a legend.m: use linewidth from plot object in drawing legend (bug #41283)
Joachim Wiesemann <gnu@jwiesemann.com>
parents: 17885
diff changeset
1304 "linewidth", min (get (h, "linewidth"), 5),
be3702a2eb8a legend.m: use linewidth from plot object in drawing legend (bug #41283)
Joachim Wiesemann <gnu@jwiesemann.com>
parents: 17885
diff changeset
1305 "marker", "none",
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1306 "userdata", h, "parent", hlegend);
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1307 endif
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1308 if (! strcmp (marker, "none"))
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11563
diff changeset
1309 line ("xdata", xpos2, "ydata", ypos2, "color", get (h, "color"),
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1310 "marker", marker, "markeredgecolor", get (h, "markeredgecolor"),
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1311 "markerfacecolor", get (h, "markerfacecolor"),
18423
1597281144e4 legend.m: Restrict maximum marker size to avoid overflowing visual area.
Rik <rik@octave.org>
parents: 18422
diff changeset
1312 "markersize", min (get (h, "markersize"), 10),
18422
be3702a2eb8a legend.m: use linewidth from plot object in drawing legend (bug #41283)
Joachim Wiesemann <gnu@jwiesemann.com>
parents: 17885
diff changeset
1313 "linestyle", "none",
be3702a2eb8a legend.m: use linewidth from plot object in drawing legend (bug #41283)
Joachim Wiesemann <gnu@jwiesemann.com>
parents: 17885
diff changeset
1314 "linewidth", min (get (h, "linewidth"), 5),
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1315 "userdata", h, "parent", hlegend);
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1316 endif
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1317 endif
21758
ffad2baa90f7 maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents: 21751
diff changeset
1318
11198
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1319 endfunction
9f080d23396f Fix multi-parented legends with the gnuplot backend (fixes #30461 and #31522)
David Bateman <dbateman@free.fr>
parents: 11149
diff changeset
1320
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1321
11418
a140991387fb legend.m: Add demo to legend for inline key.
Ben Abbott <bpabbott@mac.com>
parents: 11363
diff changeset
1322 %!demo
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1323 %! clf;
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1324 %! plot (rand (2));
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1325 %! title ("legend called with string inputs for labels");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1326 %! h = legend ("foo", "bar");
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1327 %! legend (h, "location", "northeastoutside");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1328 %! set (h, "fontsize", 20);
11462
aed2c50c3082 legend.m: legend with more than two inline keys (bug 31991). Add/modifyy demos.
Ben Abbott <bpabbott@mac.com>
parents: 11434
diff changeset
1329
aed2c50c3082 legend.m: legend with more than two inline keys (bug 31991). Add/modifyy demos.
Ben Abbott <bpabbott@mac.com>
parents: 11434
diff changeset
1330 %!demo
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1331 %! clf;
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1332 %! plot (rand (2));
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1333 %! title ("legend called with cell array of strings");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1334 %! h = legend ({"cellfoo", "cellbar"});
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1335 %! legend (h, "location", "northeast");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1336 %! set (h, "fontsize", 20);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1337
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1338 %!demo
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1339 %! clf;
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1340 %! plot (rand (3));
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1341 %! title ("legend () without inputs creates default labels");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1342 %! h = legend ();
14236
35903f035390 Escaping strings for legend entries are handled by __go_draw_axes__.
Ben Abbott <bpabbott@mac.com>
parents: 14214
diff changeset
1343
35903f035390 Escaping strings for legend entries are handled by __go_draw_axes__.
Ben Abbott <bpabbott@mac.com>
parents: 14214
diff changeset
1344 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1345 %! clf;
11418
a140991387fb legend.m: Add demo to legend for inline key.
Ben Abbott <bpabbott@mac.com>
parents: 11363
diff changeset
1346 %! x = 0:1;
22800
5de8670d10a6 Change text describing demo plots to reflect new ColorOrder (bug #49288).
Rik <rik@octave.org>
parents: 22624
diff changeset
1347 %! plot (x,x,";I am Blue;", x,2*x, x,3*x,";I am yellow;");
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1348 %! h = legend ("location", "northeastoutside");
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1349 %! ## Placing legend inside returns axes to original size
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1350 %! legend (h, "location", "northeast");
22800
5de8670d10a6 Change text describing demo plots to reflect new ColorOrder (bug #49288).
Rik <rik@octave.org>
parents: 22624
diff changeset
1351 %! title ("Blue and Yellow keys, with Orange missing");
8343
9f34f7636fe0 legend.m: Correct ording of legend labels.
Ben Abbott <bpabbott@mac.com>
parents: 8291
diff changeset
1352
9f34f7636fe0 legend.m: Correct ording of legend labels.
Ben Abbott <bpabbott@mac.com>
parents: 8291
diff changeset
1353 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1354 %! clf;
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1355 %! plot (1:10, 1:10, 1:10, fliplr (1:10));
22800
5de8670d10a6 Change text describing demo plots to reflect new ColorOrder (bug #49288).
Rik <rik@octave.org>
parents: 22624
diff changeset
1356 %! title ("incline is blue and decline is orange");
5de8670d10a6 Change text describing demo plots to reflect new ColorOrder (bug #49288).
Rik <rik@octave.org>
parents: 22624
diff changeset
1357 %! legend ({"I am blue", "I am orange"}, "location", "east");
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1358 %! legend hide
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1359 %! legend show
11363
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1360
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1361 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1362 %! clf;
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1363 %! plot (1:10, 1:10, 1:10, fliplr (1:10));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1364 %! title ("Legend with keys in horizontal orientation");
22800
5de8670d10a6 Change text describing demo plots to reflect new ColorOrder (bug #49288).
Rik <rik@octave.org>
parents: 22624
diff changeset
1365 %! legend ({"I am blue", "I am orange"}, ...
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1366 %! "location", "east", "orientation", "horizontal");
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1367 %! legend boxoff
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1368 %! legend boxon
11462
aed2c50c3082 legend.m: legend with more than two inline keys (bug 31991). Add/modifyy demos.
Ben Abbott <bpabbott@mac.com>
parents: 11434
diff changeset
1369
aed2c50c3082 legend.m: legend with more than two inline keys (bug 31991). Add/modifyy demos.
Ben Abbott <bpabbott@mac.com>
parents: 11434
diff changeset
1370 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1371 %! clf;
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1372 %! plot (1:10, 1:10, 1:10, fliplr (1:10));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1373 %! title ("Legend with box off");
22800
5de8670d10a6 Change text describing demo plots to reflect new ColorOrder (bug #49288).
Rik <rik@octave.org>
parents: 22624
diff changeset
1374 %! legend ({"I am blue", "I am orange"}, "location", "east");
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1375 %! legend boxoff
11434
1f54ee6760b5 legend.m: Only one legend per axes (bug 32022)
Ben Abbott <bpabbott@mac.com>
parents: 11418
diff changeset
1376
1f54ee6760b5 legend.m: Only one legend per axes (bug 32022)
Ben Abbott <bpabbott@mac.com>
parents: 11418
diff changeset
1377 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1378 %! clf;
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1379 %! plot (1:10, 1:10, 1:10, fliplr (1:10));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1380 %! title ("Legend with text to the left of key");
22800
5de8670d10a6 Change text describing demo plots to reflect new ColorOrder (bug #49288).
Rik <rik@octave.org>
parents: 22624
diff changeset
1381 %! legend ({"I am blue", "I am orange"}, "location", "east");
17532
492d609d2d75 legend.m: Default text labels to "right" alignment for Matlab compatibility.
Rik <rik@octave.org>
parents: 17530
diff changeset
1382 %! legend left
8343
9f34f7636fe0 legend.m: Correct ording of legend labels.
Ben Abbott <bpabbott@mac.com>
parents: 8291
diff changeset
1383
9f34f7636fe0 legend.m: Correct ording of legend labels.
Ben Abbott <bpabbott@mac.com>
parents: 8291
diff changeset
1384 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1385 %! clf;
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1386 %! plot (1:10, 1:10, 1:10, fliplr (1:10));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1387 %! title ({"Use properties to place legend text to the left of key", ...
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1388 %! "Legend text color is magenta"});
22800
5de8670d10a6 Change text describing demo plots to reflect new ColorOrder (bug #49288).
Rik <rik@octave.org>
parents: 22624
diff changeset
1389 %! h = legend ({"I am blue", "I am orange"}, "location", "east");
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1390 %! legend ("right");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1391 %! set (h, "textposition", "left");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1392 %! set (h, "textcolor", [1 0 1]);
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1393
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1394 %!demo
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1395 %! clf;
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1396 %! plot (1:10, 1:10, 1:10, fliplr (1:10));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1397 %! title ("Legend is hidden");
22800
5de8670d10a6 Change text describing demo plots to reflect new ColorOrder (bug #49288).
Rik <rik@octave.org>
parents: 22624
diff changeset
1398 %! legend ({"I am blue", "I am orange"}, "location", "east");
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1399 %! legend hide
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1400
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1401 %!demo
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1402 %! clf;
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1403 %! x = 0:1;
22800
5de8670d10a6 Change text describing demo plots to reflect new ColorOrder (bug #49288).
Rik <rik@octave.org>
parents: 22624
diff changeset
1404 %! plot (x,x,";I am Blue;", x,2*x,";I am Orange;", x,3*x,";I am Yellow;");
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1405 %! title ({"Labels are embedded in call to plot", ...
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1406 %! "Legend is hidden and then shown"});
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1407 %! legend boxon
11434
1f54ee6760b5 legend.m: Only one legend per axes (bug 32022)
Ben Abbott <bpabbott@mac.com>
parents: 11418
diff changeset
1408 %! legend hide
1f54ee6760b5 legend.m: Only one legend per axes (bug 32022)
Ben Abbott <bpabbott@mac.com>
parents: 11418
diff changeset
1409 %! legend show
11363
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1410
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1411 %!demo
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1412 %! clf;
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1413 %! x = 0:1;
22151
283d8dfcad37 Make demos Matlab compatible for comparison with dump_demos script.
Rik <rik@octave.org>
parents: 22069
diff changeset
1414 %! plot (x,x, x,2*x, x,3*x);
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1415 %! title ("Labels with interpreted Greek text");
22151
283d8dfcad37 Make demos Matlab compatible for comparison with dump_demos script.
Rik <rik@octave.org>
parents: 22069
diff changeset
1416 %! h = legend ('\alpha', '\beta=2\alpha', '\gamma=3\alpha');
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1417 %! set (h, "interpreter", "tex");
11434
1f54ee6760b5 legend.m: Only one legend per axes (bug 32022)
Ben Abbott <bpabbott@mac.com>
parents: 11418
diff changeset
1418
1f54ee6760b5 legend.m: Only one legend per axes (bug 32022)
Ben Abbott <bpabbott@mac.com>
parents: 11418
diff changeset
1419 %!demo
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1420 %! clf;
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1421 %! plot (rand (2));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1422 %! title ("Labels with TeX interpreter turned off");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1423 %! h = legend ("Hello_World", "foo^bar");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1424 %! set (h, "interpreter", "none");
9451
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1425
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1426 %!demo
15442
015cc3d1f389 legend.m: Overhaul function and add support for automatic data labels.
Rik <rik@octave.org>
parents: 15441
diff changeset
1427 %! clf;
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
1428 %! labels = {};
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1429 %! colororder = get (gca, "colororder");
6146
1a6d826e92b5 [project @ 2006-11-09 03:13:11 by jwe]
jwe
parents:
diff changeset
1430 %! for i = 1:5
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14252
diff changeset
1431 %! h = plot (1:100, i + rand (100,1)); hold on;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1432 %! set (h, "color", colororder(i,:));
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1433 %! labels = {labels{:}, ["Signal ", num2str(i)]};
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1434 %! endfor
11363
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1435 %! hold off;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1436 %! title ({"Signals with random offset and uniform noise";
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1437 %! "Legend shown below and outside of plot"});
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1438 %! xlabel ("Sample Nr [k]"); ylabel ("Amplitude [V]");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1439 %! legend (labels, "location", "southoutside");
9451
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1440
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1441 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1442 %! clf;
9451
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1443 %! x = linspace (0, 10);
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1444 %! plot (x, x);
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1445 %! hold on;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1446 %! stem (x, x.^2, "g");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1447 %! title ("First created object gets first label");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1448 %! legend ("linear");
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1449 %! hold off;
9451
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1450
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1451 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1452 %! clf;
9451
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1453 %! x = linspace (0, 10);
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1454 %! plot (x, x, x, x.^2);
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1455 %! title ("First created object gets first label");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1456 %! legend ("linear");
9451
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1457
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1458 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1459 %! clf;
9451
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1460 %! x = linspace (0, 10);
350148cc0774 legend.m: fix legend order
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
1461 %! plot (x, x, x, x.^2);
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1462 %! title ("Labels are applied in order of object creation");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1463 %! legend ("linear", "quadratic");
9457
f9fb8c1a8e45 legend.m: Add an hggroup demo using bar(). Include clf() in each demo.
Ben Abbott <bpabbott@mac.com>
parents: 9451
diff changeset
1464
f9fb8c1a8e45 legend.m: Add an hggroup demo using bar(). Include clf() in each demo.
Ben Abbott <bpabbott@mac.com>
parents: 9451
diff changeset
1465 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1466 %! clf;
22629
4bd7bab38f39 Add stem example to the hggroup type of legend (bug #49341).
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 22489
diff changeset
1467 %! subplot (2,1,1);
11363
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1468 %! rand_2x3_data1 = [0.341447, 0.171220, 0.284370; 0.039773, 0.731725, 0.779382];
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1469 %! bar (rand_2x3_data1);
13936
bfaacd5e7379 Bug fix (#34901). Allow legend options to be specified. Modify demo.
Ben Abbott <bpabbott@mac.com>
parents: 13279
diff changeset
1470 %! ylim ([0 1.0]);
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1471 %! title ("legend() works for bar graphs (hggroups)");
22629
4bd7bab38f39 Add stem example to the hggroup type of legend (bug #49341).
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 22489
diff changeset
1472 %! legend ({"1st Bar", "2nd Bar", "3rd Bar"}, "location", "northwest");
4bd7bab38f39 Add stem example to the hggroup type of legend (bug #49341).
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 22489
diff changeset
1473 %! subplot (2,1,2);
23253
8a1ba13e9914 Correct hggroup plot legends for gnuplot toolkit, add legend demo 17 items (bug #49341)
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 23219
diff changeset
1474 %! x = linspace (0, 10, 20);
8a1ba13e9914 Correct hggroup plot legends for gnuplot toolkit, add legend demo 17 items (bug #49341)
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 23219
diff changeset
1475 %! stem (x, 0.5+x.*rand (size (x))/max (x), "markeredgecolor", [0 0.7 0]);
8a1ba13e9914 Correct hggroup plot legends for gnuplot toolkit, add legend demo 17 items (bug #49341)
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 23219
diff changeset
1476 %! hold on;
8a1ba13e9914 Correct hggroup plot legends for gnuplot toolkit, add legend demo 17 items (bug #49341)
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 23219
diff changeset
1477 %! stem (x+10/(2*20), x.*(1.0+rand (size (x)))/max (x));
8a1ba13e9914 Correct hggroup plot legends for gnuplot toolkit, add legend demo 17 items (bug #49341)
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 23219
diff changeset
1478 %! xlim ([0 10+10/(2*20)]);
22629
4bd7bab38f39 Add stem example to the hggroup type of legend (bug #49341).
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 22489
diff changeset
1479 %! title ("legend() works for stem plots (hggroups)");
23253
8a1ba13e9914 Correct hggroup plot legends for gnuplot toolkit, add legend demo 17 items (bug #49341)
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 23219
diff changeset
1480 %! legend ({"Multicolor", "Unicolor"}, "location", "northwest");
9457
f9fb8c1a8e45 legend.m: Add an hggroup demo using bar(). Include clf() in each demo.
Ben Abbott <bpabbott@mac.com>
parents: 9451
diff changeset
1481
f9fb8c1a8e45 legend.m: Add an hggroup demo using bar(). Include clf() in each demo.
Ben Abbott <bpabbott@mac.com>
parents: 9451
diff changeset
1482 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1483 %! clf;
20408
71bd638e0ef6 legend.m: Fix listeners on legend line objects (bug #45563).
Rik <rik@octave.org>
parents: 20286
diff changeset
1484 %! colormap (cool (64));
71bd638e0ef6 legend.m: Fix listeners on legend line objects (bug #45563).
Rik <rik@octave.org>
parents: 20286
diff changeset
1485 %! surf (peaks ());
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1486 %! legend ("peaks()");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1487 %! title ("legend() works for surface objects too");
20408
71bd638e0ef6 legend.m: Fix listeners on legend line objects (bug #45563).
Rik <rik@octave.org>
parents: 20286
diff changeset
1488
71bd638e0ef6 legend.m: Fix listeners on legend line objects (bug #45563).
Rik <rik@octave.org>
parents: 20286
diff changeset
1489 %!demo
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1490 %! clf reset; # needed to undo colormap assignment in previous demo
11363
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1491 %! rand_2x3_data2 = [0.44804, 0.84368, 0.23012; 0.72311, 0.58335, 0.90531];
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1492 %! bar (rand_2x3_data2);
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1493 %! ylim ([0 1.2]);
22151
283d8dfcad37 Make demos Matlab compatible for comparison with dump_demos script.
Rik <rik@octave.org>
parents: 22069
diff changeset
1494 %! title ('"left" option places colors to the left of text label');
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1495 %! legend ("1st Bar", "2nd Bar", "3rd Bar");
18888
962db83e36c3 legend.m: Update demo 19 with more descriptive title.
Rik <rik@octave.org>
parents: 18753
diff changeset
1496 %! legend left;
10662
3afcd24ced61 legend.m: Key labels for specified objects.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
1497
3afcd24ced61 legend.m: Key labels for specified objects.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
1498 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1499 %! clf;
10662
3afcd24ced61 legend.m: Key labels for specified objects.
Ben Abbott <bpabbott@mac.com>
parents: 10549
diff changeset
1500 %! x = 0:0.1:7;
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1501 %! h = plot (x,sin(x), x,cos(x), x,sin(x.^2/10), x,cos(x.^2/10));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1502 %! title ("Only the sin() objects have keylabels");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1503 %! legend (h([1, 3]), {"sin (x)", "sin (x^2/10)"}, "location", "southwest");
11363
a0dfd7e8e3e2 Assign data used in demo plots for reproducibility between runs
Rik <octave@nomad.inbox5.com>
parents: 11246
diff changeset
1504
12340
d63007ac067a legend.m: Add demo for inline keys created by two plot commands.
Ben Abbott <bpabbott@mac.com>
parents: 12339
diff changeset
1505 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1506 %! clf;
12340
d63007ac067a legend.m: Add demo for inline keys created by two plot commands.
Ben Abbott <bpabbott@mac.com>
parents: 12339
diff changeset
1507 %! x = 0:0.1:10;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1508 %! plot (x, sin (x), ";sin (x);");
22069
9121d6584f6a Overhaul graphics implementation of hold() (bug #43559).
Rik <rik@octave.org>
parents: 22054
diff changeset
1509 %! hold on;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1510 %! plot (x, cos (x), ";cos (x);");
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1511 %! hold off;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1512 %! title ("legend constructed from multiple plot calls");
12340
d63007ac067a legend.m: Add demo for inline keys created by two plot commands.
Ben Abbott <bpabbott@mac.com>
parents: 12339
diff changeset
1513
12387
5fb6ea1bff65 legend.m: Add demo for replacing existing legend.
Ben Abbott <bpabbott@mac.com>
parents: 12340
diff changeset
1514 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1515 %! clf;
12387
5fb6ea1bff65 legend.m: Add demo for replacing existing legend.
Ben Abbott <bpabbott@mac.com>
parents: 12340
diff changeset
1516 %! x = 0:0.1:10;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1517 %! plot (x, sin (x), ";sin (x);");
22069
9121d6584f6a Overhaul graphics implementation of hold() (bug #43559).
Rik <rik@octave.org>
parents: 22054
diff changeset
1518 %! hold on;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1519 %! plot (x, cos (x), ";cos (x);");
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1520 %! hold off;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1521 %! title ("Specified label text overrides previous labels");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1522 %! legend ({"Sine", "Cosine"}, "location", "northeastoutside");
12387
5fb6ea1bff65 legend.m: Add demo for replacing existing legend.
Ben Abbott <bpabbott@mac.com>
parents: 12340
diff changeset
1523
12394
c2e1973d870b legend.m: "legend off" should delete the legend object.
Ben Abbott <bpabbott@mac.com>
parents: 12388
diff changeset
1524 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1525 %! clf;
12394
c2e1973d870b legend.m: "legend off" should delete the legend object.
Ben Abbott <bpabbott@mac.com>
parents: 12388
diff changeset
1526 %! x = 0:10;
c2e1973d870b legend.m: "legend off" should delete the legend object.
Ben Abbott <bpabbott@mac.com>
parents: 12388
diff changeset
1527 %! plot (x, rand (11));
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1528 %! axis ([0, 10, 0, 1]);
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1529 %! xlabel ("Indices");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1530 %! ylabel ("Random Values");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1531 %! title ('Legend "off" deletes the legend');
22624
37b7b86f62f2 Fix legend.m typo in demo example 23 (bug #49341).
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 22489
diff changeset
1532 %! legend (cellstr (num2str ((0:10)')), "location", "northeastoutside");
37b7b86f62f2 Fix legend.m typo in demo example 23 (bug #49341).
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 22489
diff changeset
1533 %! pause (1);
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1534 %! legend off;
12387
5fb6ea1bff65 legend.m: Add demo for replacing existing legend.
Ben Abbott <bpabbott@mac.com>
parents: 12340
diff changeset
1535
12395
4d30b4136a3e legend.m: Align legends to plot box, add demo. Bug 32373.
Ben Abbott <bpabbott@mac.com>
parents: 12394
diff changeset
1536 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1537 %! clf;
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1538 %! x = (1:5)';
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14252
diff changeset
1539 %! subplot (2,2,1);
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1540 %! plot (x, rand (numel (x)));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1541 %! legend (cellstr (num2str (x)), "location", "northwestoutside");
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14252
diff changeset
1542 %! subplot (2,2,2);
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1543 %! plot (x, rand (numel (x)));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1544 %! legend (cellstr (num2str (x)), "location", "northeastoutside");
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14252
diff changeset
1545 %! subplot (2,2,3);
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1546 %! plot (x, rand (numel (x)));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1547 %! legend (cellstr (num2str (x)), "location", "southwestoutside");
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14252
diff changeset
1548 %! subplot (2,2,4);
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1549 %! plot (x, rand (numel (x)));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1550 %! legend (cellstr (num2str (x)), "location", "southeastoutside");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1551 %! ## Legend works on a per axes basis for each subplot
12387
5fb6ea1bff65 legend.m: Add demo for replacing existing legend.
Ben Abbott <bpabbott@mac.com>
parents: 12340
diff changeset
1552
12395
4d30b4136a3e legend.m: Align legends to plot box, add demo. Bug 32373.
Ben Abbott <bpabbott@mac.com>
parents: 12394
diff changeset
1553 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1554 %! clf;
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14236
diff changeset
1555 %! plot (rand (2));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1556 %! title ("legend() will warn if extra labels are specified");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1557 %! legend ("Hello", "World", "interpreter", "foobar");
13979
f35b593688a5 Changing the legend's interpreter property should be inherited by the
Ben Abbott <bpabbott@mac.com>
parents: 13937
diff changeset
1558
f35b593688a5 Changing the legend's interpreter property should be inherited by the
Ben Abbott <bpabbott@mac.com>
parents: 13937
diff changeset
1559 %!demo
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1560 %! clf;
14207
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1561 %! x = 0:10;
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1562 %! y1 = rand (size (x));
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1563 %! y2 = rand (size (x));
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1564 %! [ax, h1, h2] = plotyy (x, y1, x, y2);
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1565 %! title ({"plotyy legend test #1", "Blue label to left axis, Orange label to right axis"});
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1566 %! drawnow ();
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1567 %! legend ("Blue", "Orange", "location", "south");
12395
4d30b4136a3e legend.m: Align legends to plot box, add demo. Bug 32373.
Ben Abbott <bpabbott@mac.com>
parents: 12394
diff changeset
1568
13979
f35b593688a5 Changing the legend's interpreter property should be inherited by the
Ben Abbott <bpabbott@mac.com>
parents: 13937
diff changeset
1569 %!demo
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1570 %! clf;
14207
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1571 %! x = 0:10;
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1572 %! y1 = rand (size (x));
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1573 %! y2 = rand (size (x));
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1574 %! [ax, h1, h2] = plotyy (x, y1, x, y2);
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1575 %! ylabel (ax(1), {"Blue", "Y", "Axis"});
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1576 %! title ('plotyy legend test #2: "westoutside" adjusts to ylabel');
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1577 %! drawnow ();
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1578 %! legend ([h1, h2], {"Blue", "Orange"}, "location", "westoutside");
13979
f35b593688a5 Changing the legend's interpreter property should be inherited by the
Ben Abbott <bpabbott@mac.com>
parents: 13937
diff changeset
1579
f35b593688a5 Changing the legend's interpreter property should be inherited by the
Ben Abbott <bpabbott@mac.com>
parents: 13937
diff changeset
1580 %!demo
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1581 %! clf;
14207
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1582 %! x = 0:10;
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1583 %! y1 = rand (size (x));
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1584 %! y2 = rand (size (x));
57e3490094e1 Fix order of legend entries for plotyy. Bug # 35314.
Ben Abbott <bpabbott@mac.com>
parents: 14138
diff changeset
1585 %! [ax, h1, h2] = plotyy (x, y1, x, y2);
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1586 %! ylabel (ax(2), {"Orange", "Y", "Axis"});
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1587 %! title ('plotyy legend test #3: "eastoutside" adjusts to ylabel');
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1588 %! drawnow ();
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1589 %! legend ([h1, h2], {"Blue", "Orange"}, "location", "eastoutside");
13979
f35b593688a5 Changing the legend's interpreter property should be inherited by the
Ben Abbott <bpabbott@mac.com>
parents: 13937
diff changeset
1590
20408
71bd638e0ef6 legend.m: Fix listeners on legend line objects (bug #45563).
Rik <rik@octave.org>
parents: 20286
diff changeset
1591 %!demo
71bd638e0ef6 legend.m: Fix listeners on legend line objects (bug #45563).
Rik <rik@octave.org>
parents: 20286
diff changeset
1592 %! clf;
71bd638e0ef6 legend.m: Fix listeners on legend line objects (bug #45563).
Rik <rik@octave.org>
parents: 20286
diff changeset
1593 %! plot (1:10, 1:10);
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1594 %! title ("a very long label can sometimes cause problems");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1595 %! legend ("hello very big world", "location", "northeastoutside");
20408
71bd638e0ef6 legend.m: Fix listeners on legend line objects (bug #45563).
Rik <rik@octave.org>
parents: 20286
diff changeset
1596
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1597 %!demo # bug 36408
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1598 %! clf;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1599 %! option = "right";
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1600 %! subplot (3,1,1);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1601 %! plot (rand (1,4));
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1602 %! xlabel xlabel;
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1603 %! ylabel ylabel;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1604 %! title ("Subplots adjust to the legend placed outside");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1605 %! legend ({"1"}, "location", "northeastoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1606 %! legend (option);
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1607 %! subplot (3,1,2);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1608 %! plot (rand (1,4));
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1609 %! xlabel xlabel;
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1610 %! ylabel ylabel;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1611 %! legend ({"1234567890"}, "location", "eastoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1612 %! legend (option);
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1613 %! subplot (3,1,3);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1614 %! plot (rand (1,4));
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1615 %! xlabel xlabel;
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1616 %! ylabel ylabel;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1617 %! legend ({"12345678901234567890"}, "location", "southeastoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1618 %! legend (option);
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1619
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1620 %!demo # bug 36408
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1621 %! clf;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1622 %! option = "right";
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1623 %! subplot (3,1,1);
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1624 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1625 %! title ("Subplots adjust to the legend placed outside");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1626 %! legend ({"1"}, "location", "northwestoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1627 %! legend (option);
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1628 %! subplot (3,1,2);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1629 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1630 %! legend ({"1234567890"}, "location", "westoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1631 %! legend (option);
16805
2281d957cde6 legend.m: Tweak code for Octave coding conventions.
Rik <rik@octave.org>
parents: 16800
diff changeset
1632 %! subplot (3,1,3);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1633 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1634 %! legend ({"12345678901234567890"}, "location", "southwestoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1635 %! legend (option);
16799
286904321282 Use unmodified axes "position" and "outerposition" properties for legend().
Ben Abbott <bpabbott@mac.com>
parents: 16796
diff changeset
1636
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1637 %!demo # bug 36408
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1638 %! clf;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1639 %! option = "right";
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1640 %! subplot (3,1,1);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1641 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1642 %! set (gca (), "yaxislocation", "right");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1643 %! xlabel ("xlabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1644 %! ylabel ("ylabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1645 %! title ("Subplots adjust to the legend placed outside");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1646 %! legend ({"1"}, "location", "northeastoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1647 %! legend (option);
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1648 %! subplot (3,1,2);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1649 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1650 %! set (gca (), "yaxislocation", "right");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1651 %! xlabel ("xlabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1652 %! ylabel ("ylabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1653 %! legend ({"1234567890"}, "location", "eastoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1654 %! legend (option);
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1655 %! subplot (3,1,3);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1656 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1657 %! set (gca (), "yaxislocation", "right");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1658 %! xlabel ("xlabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1659 %! ylabel ("ylabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1660 %! legend ({"12345678901234567890"}, "location", "southeastoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1661 %! legend (option);
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1662
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1663 %!demo # bug 36408
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1664 %! clf;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1665 %! option = "right";
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1666 %! subplot (3,1,1);
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1667 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1668 %! set (gca (), "yaxislocation", "right");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1669 %! xlabel ("xlabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1670 %! ylabel ("ylabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1671 %! title ("Subplots adjust to the legend placed outside");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1672 %! legend ({"1"}, "location", "northwestoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1673 %! legend (option);
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1674 %! subplot (3,1,2);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1675 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1676 %! set (gca (), "yaxislocation", "right");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1677 %! xlabel ("xlabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1678 %! ylabel ("ylabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1679 %! legend ({"1234567890"}, "location", "westoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1680 %! legend (option);
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1681 %! subplot (3,1,3);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1682 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1683 %! set (gca (), "yaxislocation", "right");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1684 %! xlabel ("xlabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1685 %! ylabel ("ylabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1686 %! legend ({"12345678901234567890"}, "location", "southwestoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1687 %! legend (option);
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1688
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1689 %!demo # bug 36408;
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1690 %! clf;
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1691 %! option = "right";
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1692 %! subplot (3,1,1);
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1693 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1694 %! set (gca (), "xaxislocation", "top");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1695 %! xlabel ("xlabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1696 %! ylabel ("ylabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1697 %! title ("Subplots adjust to the legend placed outside");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1698 %! legend ({"1"}, "location", "northwestoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1699 %! legend (option);
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1700 %! subplot (3,1,2);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1701 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1702 %! set (gca (), "xaxislocation", "top");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1703 %! xlabel ("xlabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1704 %! ylabel ("ylabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1705 %! legend ({"1234567890"}, "location", "westoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1706 %! legend (option);
16908
1c4be5dcacd5 Add demos to legend.m using subplots.
Ben Abbott <bpabbott@mac.com>
parents: 16885
diff changeset
1707 %! subplot (3,1,3);
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1708 %! plot (rand (1,4));
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1709 %! set (gca (), "xaxislocation", "top");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1710 %! xlabel ("xlabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1711 %! ylabel ("ylabel");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1712 %! legend ({"12345678901234567890"}, "location", "southwestoutside");
16921
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1713 %! legend (option);
9a316ec12b5f legend.m: Use Matlab coding conventions in %!demo blocks so comparison script can run.
Rik <rik@octave.org>
parents: 16910
diff changeset
1714
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1715 %!demo # bug 39697
17190
df4c4b7708a4 Add titles and clean-up plotting %!demos.
Rik <rik@octave.org>
parents: 17179
diff changeset
1716 %! clf;
17179
828e8852efa9 legend.m: Add %!demo block showing bug #39697.
Rik <rik@octave.org>
parents: 17174
diff changeset
1717 %! plot (1:10);
22302
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1718 %! legend ("Legend Text");
1c4cd12987f5 Use Octave syntax in graphics demos.
Rik <rik@octave.org>
parents: 22151
diff changeset
1719 %! title ({"Multi-line", "titles", "are a", "problem", "See bug #39697"});
17179
828e8852efa9 legend.m: Add %!demo block showing bug #39697.
Rik <rik@octave.org>
parents: 17174
diff changeset
1720
23508
4b38c9687331 Skip tests that require gnuplot when gnuplot is not installed (bug #36983)
Mike Miller <mtmiller@octave.org>
parents: 23263
diff changeset
1721 %!testif ; any (strcmp ("gnuplot", available_graphics_toolkits ()))
17107
dbd64c9a16da Restore graphics toolkit after %!tests that alter it.
Rik <rik@octave.org>
parents: 17065
diff changeset
1722 %! toolkit = graphics_toolkit ("gnuplot");
17119
bd50e0660545 test: Add missing semicolons to suppress output in some plot %!tests.
Rik <rik@octave.org>
parents: 17107
diff changeset
1723 %! h = figure ("visible", "off");
16973
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1724 %! unwind_protect
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1725 %! position = get (h, "position");
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1726 %! plot (rand (3));
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1727 %! legend ();
19278
6ca096827123 Use tempname() rather than tmpnam() in core Octave.
Rik <rik@octave.org>
parents: 18937
diff changeset
1728 %! filename = sprintf ("%s.eps", tempname ());
16973
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1729 %! print (filename);
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1730 %! unlink (filename);
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1731 %! assert (get (h, "position"), position);
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1732 %! unwind_protect_cleanup
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1733 %! close (h);
17107
dbd64c9a16da Restore graphics toolkit after %!tests that alter it.
Rik <rik@octave.org>
parents: 17065
diff changeset
1734 %! graphics_toolkit (toolkit);
16973
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1735 %! end_unwind_protect
d429a05dc11c legend.m: Move %!test block below %!demo blocks per standard usage.
Rik <rik@octave.org>
parents: 16933
diff changeset
1736
23573
1b4f4ec53b4a use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents: 23572
diff changeset
1737 %!test <*42035>
18647
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1738 %! h = figure ("visible", "off");
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1739 %! unwind_protect
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1740 %! hax1 = subplot (1,2,1);
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1741 %! plot (1:10);
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1742 %! hax2 = subplot (1,2,2);
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1743 %! plot (1:10);
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1744 %! hleg1 = legend (hax1, "foo");
21580
ecce63c99c3f maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents: 21385
diff changeset
1745 %! assert (get (hleg1, "userdata").handle, hax1);
18647
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1746 %! assert (gca (), hax2);
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1747 %! hleg2 = legend ("bar");
21580
ecce63c99c3f maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents: 21385
diff changeset
1748 %! assert (get (hleg2, "userdata").handle, gca ());
18647
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1749 %! unwind_protect_cleanup
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1750 %! close (h);
ce36233e4849 legend.m: Correctly handle axis handle as first argument (bug #42035).
Rik <rik@octave.org>
parents: 18644
diff changeset
1751 %! end_unwind_protect
24434
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1752
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1753 %!test
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1754 %! ## Difficult example from plotyy demo #1
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1755 %! hf = figure ("visible", "off");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1756 %! unwind_protect
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1757 %! x = 0:0.1:2*pi;
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1758 %! y1 = sin (x);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1759 %! y2 = exp (x - 1);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1760 %! hax = plotyy (x,y1, x-1,y2, @plot, @semilogy);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1761 %! text (0.5, 0.5, "Left Axis", "parent", hax(1));
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1762 %! text (4.5, 80, "Right Axis", "parent", hax(2));
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1763 %! hleg = legend ("show");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1764 %! assert (get (hleg, "string"), {"data1", "data2"});
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1765 %! fail ("legend ('foo', 'bar', 'baz')", "warning", "ignoring extra labels");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1766 %! unwind_protect_cleanup
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1767 %! close (hf);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1768 %! end_unwind_protect
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1769
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1770 %!test
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1771 %! ## Test warnings about objects to label
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1772 %! hf = figure ("visible", "off");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1773 %! unwind_protect
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1774 %! hax = gca ();
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1775 %! fail ("legend ('foobar')", "warning", "plot data is empty");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1776 %! ht = text (0.5, 0.5, "Hello World");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1777 %! fail ("legend ('foobar')", "warning", "plot data is empty");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1778 %! lastwarn (""); # clear warning
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1779 %! hleg = legend ();
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1780 %! assert (isempty (hleg) && isempty (lastwarn ()));
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1781 %! fail ("legend ('foobar')", "warning", "plot data is empty");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1782 %! hln = line ([0 1], [0 1]);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1783 %! fail ("legend ('foo', 'bar')", "warning", "ignoring extra labels");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1784 %! plot (rand (2, 21));
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1785 %! fail ("legend ()", "warning", "labeling only first 20 data objects");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1786 %! unwind_protect_cleanup
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1787 %! close (hf);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1788 %! end_unwind_protect
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1789
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1790 %!test
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1791 %! ## Test warnings about unsupported features
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1792 %! hf = figure ("visible", "off");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1793 %! unwind_protect
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1794 %! plot (1:10);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1795 %! fail ("legend ('location','best')", "warning", "'best' not yet implemented");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1796 %! fail ("legend ('location','bestoutside')", "warning", "'best' not yet implemented");
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1797 %! unwind_protect_cleanup
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1798 %! close (hf);
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1799 %! end_unwind_protect
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1800
436deae9f9ab legend.m: Overhaul function for greater Matlab compatibility.
Rik <rik@octave.org>
parents: 24432
diff changeset
1801