[Scilab-users] color under a curve
Adrien Vogt-Schilb
vogt at centre-cired.fr
Wed Mar 13 13:05:40 CET 2013
On 13/03/2013 13:01, Adrien Vogt-Schilb wrote:
>
> Samuel once provided a solution to this:
For the record: actually it was Antoine, and he provided a function.
Could still be deposited to fileexchange. Antoine would you allow your
function to be posted? Do you happen to have a more recent version than
the one you posted back in 2011:
Here is an example:
x=[-10:10];y1=x+10;y2=x.*x;
BetweenCurves(x,y1,y2);
Here is the source code below:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Plot area between two curves
function [h,epoly,ey1,ey2]=BetweenCurves(x,y1,y2,varargin)
//
// Plots two curves and fill the area in between
//
// INPUTS:
// x vector (1,n) of horizontal coordinates
// y1 vector (1,n) value of 1st curve y1(x)
// y2 vector (1,n) value of 2nd curve y2(x)
// -- optional inputs: pairs "keyword","value" --
// "handle",h handle to the graphic window to use
// "axis",a handle to the graphic axis to use
// "foreground", colorid id of the color to use for
painting the area
// "background", colorid id of the color to use for
curves stroke
//
// OUTPUTS:
// h handle to the graphic window used
// epoly handle to the polygone that fill the area in
between
// ey1 handle to first curve
// ey2 handle to second curve
//default values for optional argument
hfig=-1;
background=%nan;
foreground=%nan;
// scan varargin for optional parameter pairs (they can appear in any
order)
for i=1:2:length(varargin)
keyword=varargin(i);
value=varargin(i+1);
select keyword
case "handle" then
hfig=value;
scf(hfig);
case "axis" then
axis=value;
sca(axis);
hfig=axis.parent;
case "background" then
background=value;
case "foreground" then
background=value;
end
end
// special treatment for handle (aka hack alert)
if typeof(hfig) ~= "handle" then
hfig=scf();
end
h=hfig;
scf(hfig);
xfpoly([x,x($:-1:1)],[y1,y2($:-1:1)]);
epoly=gce();
plot(x,y1);
ey1=gce();
plot(x,y2);
ey2=gce();
// background setting
if (~isnan(background)) then
// optional background specified
epoly.background=background;
else
// default background
epoly.background=color("gray87");
end
// foreground setting (as for background)
if (~isnan(foreground)) then
epoly.foreground=foreground;
ey1.children.foreground=foreground;
ey2.children.foreground=foreground;
else
epoly.foreground=color("gray65");
ey1.children.foreground=color("gray65");
ey2.children.foreground=color("gray65");
end
endfunction
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
--
Adrien Vogt-Schilb (Cired)
Tel: (+33) 1 43 94 73 83
More information about the users
mailing list