19321908d7cf5c0be7ce152e4788764c949afbcf
[scilab.git] / scilab / modules / graphics / macros / colorbar.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) Bruno Pincon
3 // Copyright (C) Serge Steer (adaptation to new graphic system)
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
9
10 function colorbar(varargin)
11
12     //  PURPOSE
13     //     Draw a colorbar for a plot3d, fec, Sgrayplot, etc...
14     //
15     //  PARAMETERS
16     //     umin : min value of the plot
17     //     umax : max value of the plot
18     //     colminmax : (optional) a vector with 2 integer components
19     //                 the first is the color number (of the current
20     //                 colormap) associated with umin
21     //                 the second the max color number ....
22     //                 default : [1 nb_colors] where nb_colors is
23     //                 the number of colors of the current colormap.
24     //                 May be useful to deal with a part of the colormap
25     //                 (for instance using fec or plot3d)
26     //     fmt : optional, a C format to display colorbar graduations
27     //
28     //  CAUTION
29     //     this function may be used BEFORE a plot3d, fec, Sgrayplot, ...
30     //     It is important because this function set and change the
31     //     frame for the plot. This way the colorbar is not part of
32     //     the "associated" plot and so is not modified by a zoom or
33     //     a rotation of the plot.
34     //
35     //
36     //  EXAMPLES
37     //     see the help page
38
39     // Check number of input argument
40     if size(varargin)<2 | size(varargin)>4 then
41         error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"), "colorbar", 2, 4));
42     end
43     umin=varargin(1);
44     umax=varargin(2);
45     if size(varargin) > 2 then
46         colminmax=varargin(3);
47     end
48     if size(varargin) > 3 then
49         fmt=varargin(4);
50     end
51
52     nb_grad = 5
53     if ~exists("fmt","local") then
54         fmt="%-5.2g"
55     else
56         if type(fmt)<>10|size(fmt,"*")<>1 then
57             error(msprintf(gettext("%s: Wrong type for input argument #%d: %s data structure expected.\n"), "colorbar", 4, "string (containing a C format)"));
58         end
59     end
60
61     f=gcf();
62     if ~exists("colminmax","local") then
63         nb_colors = size(f.color_map,1)
64         colminmax = [1 nb_colors]
65     else
66         nb_colors = colminmax(2) - colminmax(1) + 1
67     end
68
69     //defer the drawing to avoid binking
70     id=f.immediate_drawing=="on";
71     if id then f.immediate_drawing=="off",end
72     // get current axes and properties
73     a=gca();
74     fg_color=a.foreground
75     wr=a.axes_bounds; //get the rectangle of the current axes
76
77     // modify the orginal axes to let space for the colorbar
78     a_pl=a;
79     a_pl.axes_bounds=[wr(1) , wr(2) , 0.85*wr(3) , wr(4)]
80
81     // create a new axes for the colorbar et set its properties
82     a_cb=newaxes();
83     a_cb.axes_bounds=[wr(1)+0.83*wr(3) , wr(2)+wr(4)*0.2 , 0.2*wr(3) , wr(4)*0.6];
84     a_cb.data_bounds=[0 umin;1 umax];
85     a_cb.foreground=a.foreground;
86     a_cb.background=f.background;
87     a_cb.axes_visible="on";
88     a_cb.y_location = "right";
89     a_cb.tight_limits ="on";
90
91     //It is not possible to set no ticks for x (should be fixed)
92     a_cb.x_ticks=tlist(["ticks","locations","labels"],-1,"");
93     ytics = linspace(umin, umax, nb_grad);
94     a_cb.y_ticks=tlist(["ticks","locations","labels"],ytics', " "+msprintf(fmt+"\n",ytics'));
95     a_cb.auto_ticks = ["off","off","on"];
96     a_cb.box = "on";
97     a_cb.margins=[0 0.75 0 0];
98
99     //draw the colorbar
100     y = linspace(umin,umax,nb_colors)
101     col=[colminmax(1):colminmax(2)]
102     Sgrayplot([0 1],y,[col;col],colminmax=colminmax)
103
104     //reset the initial values
105     sca(a_pl) //current axes
106     if id then f.immediate_drawing="on",end //drawing mode
107
108 endfunction
109
110
111
112
113
114