8cc7b0c27a3043f1ea3da3050186748e6e4b5909
[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-en.txt
9
10 function colorbar(umin, umax, colminmax,fmt)
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   nb_grad = 5
40   if ~exists("fmt","local") then 
41     fmt='%-5.2g'
42   else
43     if type(fmt)<>10|size(fmt,'*')<>1 then 
44       error("colorbar: the fmt argument should be a string containing a C format")
45     end
46   end
47   
48   f=gcf();
49   if ~exists("colminmax","local") then 
50     nb_colors = size(f.color_map,1) 
51     colminmax = [1 nb_colors]
52   else
53     nb_colors = colminmax(2) - colminmax(1) + 1
54   end
55   
56   //defer the drawing to avoid binking
57   id=f.immediate_drawing=='on';
58   if id then f.immediate_drawing=='off',end
59    // get current axes and properties
60   a=gca(); 
61   fg_color=a.foreground
62   wr=a.axes_bounds; //get the rectangle of the current axes
63   
64   // modify the orginal axes to let space for the colorbar
65   a_pl=a;
66   a_pl.axes_bounds=[wr(1) , wr(2) , 0.85*wr(3) , wr(4)]
67
68   // create a new axes for the colorbar et set its properties
69   a_cb=newaxes(); 
70   a_cb.axes_bounds=[wr(1)+0.83*wr(3) , wr(2)+wr(4)*0.2 , 0.2*wr(3) , wr(4)*0.6];
71   a_cb.data_bounds=[0 umin;1 umax];
72   a_cb.foreground=a.foreground;
73   a_cb.background=f.background;
74   a_cb.axes_visible='on';
75   a_cb.y_location = "right";
76   a_cb.tight_limits ="on";
77     
78   //It is not possible to set no ticks for x (should be fixed)
79   a_cb.x_ticks=tlist(["ticks","locations","labels"],-1,'');
80   ytics = linspace(umin, umax, nb_grad);
81   a_cb.y_ticks=tlist(["ticks","locations","labels"],ytics', ' '+msprintf(fmt+'\n',ytics'));
82   a_cb.auto_ticks = ["off","off","on"];
83   a_cb.box = "on";
84   a_cb.margins=[0 0.75 0 0];
85    
86   //draw the colorbar
87   y = linspace(umin,umax,nb_colors)
88   col=[colminmax(1):colminmax(2)]
89   Sgrayplot([0 1],y,[col;col],colminmax=colminmax)
90
91   //reset the initial values 
92   sca(a_pl) //current axes
93   if id then f.immediate_drawing='on',end //drawing mode
94
95 endfunction
96
97
98
99
100
101