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