Search code examples
graphlegendpolylinescilabsurface

Scilab : add legend for surface plot


I would like to add a legend to a surface plot. I have tried, doing like this :

X=[0:0.3:2*%pi];   //example data
[x,y]=ndgrid(X,X);
z1=sin(X')*cos(X);
z2=z1/2;
z3=z1/3;
figure=scf();
surf(x,y,z1);
surf(x,y,z2);
surf(x,y,z3);
axes=figure.children(1);
axes.children(1).foreground=color(0,0,0);
axes.children(2).foreground=color(0,0,0);
axes.children(3).foreground=color(255,0,0);
axes.children(1).color_flag=0;
axes.children(2).color_flag=0;
axes.children(3).color_flag=0;
axes.children(1).color_mode=color(0,255,0);
axes.children(2).color_mode=color(0,0,255);
axes.children(3).color_mode=0;
legend(['z1','z1 divided by 2','z1 divided by 3'],opt=2,font_size=2);

I get the following error message:

 !--error 10000 
legend : Neither handle of type 'Polyline' can be found.

If it's not possible to do this with the basic version of Scilab, could you please advise to me some libraries Scilab permitting to do this.

Thanks for your help.


Solution

  • Legend not possible for surface plots

    Legends is only for plot2dx graphs as stated in the documentation of legend properties:

    This entity defines the parameters for legends drawn below plot2dx graphs or created by the captions function.

    Alternatives

    You could simply add a title using xtitle

    xtitle('z1,z1 div by2, z2 div by 3');
    

    You could draw a box using uicontrol and style it using uicontrol_properties:

    fig = gcf();
    uicontrol(fig, "style", "text", ...
                   "string", "<html>z1<br>z1/2<br>z1/3</html>", ...
                   "position",[100 100 100 100], ...
                   "fontsize",15);