Mercurial > hg > octave-lyh
view scripts/plot/legend.m @ 6914:40be41c7d098
[project @ 2007-09-18 19:51:06 by jwe]
author | jwe |
---|---|
date | Tue, 18 Sep 2007 19:51:06 +0000 |
parents | 76e3d985ae56 |
children | e78e31f0a236 |
line wrap: on
line source
## Copyright (C) 2001 Laurent Mazet ## Copyright (C) 2006 John W. Eaton ## ## This file is part of Octave. ## ## Octave is free software; you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2, or (at your option) ## any later version. ## ## Octave is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Octave; see the file COPYING. If not, write to the Free ## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ## 02110-1301, USA. ## -*- texinfo -*- ## @deftypefn {Function File} {} legend (@var{st1}, @var{st2}, @dots{}) ## @deftypefnx {Function File} {} legend (@var{st1}, @var{st2}, @dots{}, @var{pos}) ## @deftypefnx {Function File} {} legend (@var{matstr}) ## @deftypefnx {Function File} {} legend (@var{matstr}, @var{pos}) ## @deftypefnx {Function File} {} legend (@var{cell}) ## @deftypefnx {Function File} {} legend (@var{cell}, @var{pos}) ## @deftypefnx {Function File} {} legend ('@var{func}') ## ## Display a legend for the current axes using the specified strings ## as labels. Legend entries may be specified as individual character ## string arguments, a character array, or a cell array of character ## strings. Legend works on line graphs, bar graphs, etc. A plot must ## exist before legend is called. ## ## The optional parameter @var{pos} specifies the location of the legend ## as follows: ## ## @multitable @columnfractions 0.1 0.1 0.8 ## @item @tab -1 @tab ## To the top right of the plot ## @item @tab 0 @tab ## Don't move the legend box (default) ## @item @tab 1 @tab ## Upper right-hand corner ## @item @tab 2 @tab ## Upper left-hand corner ## @item @tab 3 @tab ## Lower left-hand corner ## @item @tab 4 @tab ## Lower right-hand corner ## @end multitable ## ## Some specific functions are directely avaliable using @var{func}: ## ## @table @code ## @item "show" ## Show legends from the plot ## @item "hide" ## @itemx off ## Hide legends from the plot ## @item "boxon" ## Draw a box around legends ## @item "boxoff" ## Withdraw the box around legends ## @item "left" ## Text is to the left of the keys ## @item "right" ## Text is to the right of the keys ## @end table ## @end deftypefn ## PKG_ADD mark_as_command legend function legend (varargin) nargs = nargin; ca = gca (); if (nargs > 0) pos = varargin{nargs}; if (isnumeric (pos) && isscalar (pos) && round (pos) == pos) if (pos >= -1 && pos <= 4) set (ca, "keypos", pos); nargs--; else error ("legend: invalid position specified"); endif endif endif kids = get (ca, "children"); nkids = numel (kids); k = 1; turn_on_legend = false; if (nargs == 1) arg = varargin{1}; if (ischar (arg)) if (rows (arg) == 1) str = tolower (deblank (arg)); switch (str) case {"off", "hide"} set (ca, "key", "off"); case "show" set (ca, "key", "on"); case "toggle" val = get (ca, "key"); if (strcmp (val, "on")) set (ca, "key", "off"); else set (ca, "key", "on"); endif case "boxon" set (ca, "key", "on", "keybox", "on"); case "boxoff" set (ca, "keybox", "off"); otherwise while (k <= nkids && ! strcmp (get (kids(k), "type"), "line")) k++; endwhile if (k <= nkids) turn_on_legend = true; set (kids(k), "keylabel", arg); else warning ("legend: ignoring extra labels"); endif endswitch nargs--; else varargin = cellstr (arg); nargs = numel (varargin); endif elseif (iscellstr (arg)) varargin = arg; nargs = numel (varargin); else error ("legend: expecting argument to be a character string"); endif endif if (nargs > 0) have_data = false; for i = 1:nkids if (strcmp (get (kids(k), "type"), "line")) have_data = true; break; endif endfor if (! have_data) warning ("legend: plot data is empty; setting key labels has no effect"); endif endif warned = false; for i = 1:nargs arg = varargin{i}; if (ischar (arg)) while (k <= nkids && ! strcmp (get (kids(k), "type"), "line")) k++; endwhile if (k <= nkids) set (kids(k), "keylabel", arg); turn_on_legend = true; k++; elseif (! warned) warned = true; warning ("legend: ignoring extra labels"); endif else error ("legend: expecting argument to be a character string"); endif endfor if (turn_on_legend) set (ca, "key", "on"); endif endfunction %!demo %! close all; %! plot(1:10, 1:10); %! title("a very long label can sometimes cause problems"); %! legend({"hello world"}, -1) %!demo %! close all; %! labels = {}; %! for i = 1:5 %! plot(1:100, i + rand(100,1)); hold on; %! labels = {labels{:}, strcat("Signal ", num2str(i))}; %! endfor; hold off; %! title("Signals with random offset and uniform noise") %! xlabel("Sample Nr [k]"); ylabel("Amplitude [V]"); %! legend(labels, -1) %! legend("boxon")