[Scilab-users] Axis break with Scilab ?

Rafael Guerra jrafaelbguerra at hotmail.com
Wed Nov 23 15:05:30 CET 2016


Hi Antoine,

Please find here below improved code to plot with breaks, using a function "plotbreaks":

// Multiple axis breaks in Scilab (2nd attempt)
// START OF CODE

clear;

function []=plotbreaks(x0,y0,dx_break);
// x0 and y0 are 1D arrays to plot with breaks
    [x0,k] = gsort(x0,'g','i');
    y0= y0(k);
    k=1;
    dxtick = stdev(x0)/4;  // try to plot ticks every dxtic
    xb= list();
    yb= list();
    xb(1) = x0(1);
    yb(1) = y0(1);
    for i=1:length(x0)-1
        if abs(x0(i+1)-x0(i)) < dx_break then
            xb(k)= [xb(k) x0(i+1)];
            yb(k)= [yb(k) y0(i+1)];
        else
            k= k+1;
            xb(k) = x0(i+1);
            yb(k) = y0(i+1);
        end
    end
    ymin = min(y0)-0.1*stdev(y0);
    xn=1;
    xi0 = 0;
    for i=1:k
        li = length(xb(i));
        xi = x0(xn:xn+li-1) - xi0;
        val1 = xb(i)(1):dxtick:xb(i)($);
        if val1($)<>xb(i)($) then val1=[val1 xb(i)($)]; end
        xaxis = linspace(xi(1),xi($),length(val1));
        plot2d(xi,yb(i),axesflag=0)
        // TODO: improve grid display & fill gaps with light-gray color
        xgrid(color("grey70"));  //a better grid style:
        a = gca();
        a.grid_style=[8 8]; 
        val2 = [];
        for j=1:length(val1)
            val2= [val2 msprintf("%.1f",val1(j))];
        end
        drawaxis(x=xaxis,y=ymin,dir='d',tics='v', val=val2)
        xn = xn + li;
        if i<k then
           xi0= x0(xn) - xi($) - dxtick/4;
        end
    end
    f=gcf();
    f.children.axes_visible = ["off","on","on"]
endfunction


clf();
x0=[-7.5:0.1:10 20.1:0.33:25 60:0.25:100];
y0= exp(x0/30).*(1+0.5*sin(x0));
dx_break= 3; // adjust this threshold to define breaks

a=plotbreaks(x0,y0,dx_break)

//END OF CODE


Regards,
Rafael


-----Original Message-----
From: users [mailto:users-bounces at lists.scilab.org] On Behalf Of Antoine Monmayrant
Sent: Tuesday, November 22, 2016 1:31 PM
To: users at lists.scilab.org
Subject: [Scilab-users] Axis break with Scilab ?

Hi all,

I just got a question from one of my colleagues: "Is this possible to get axis breaks when plotting with Scilab?"
(ie a plot where a bit of the scale in x, y or even both is missing, see : http://www.originlab.com/doc/Tutorials/Multiple-Axis-Breaks ).
As far as I know, I don't see any direct way to do it.

Am I wrong?

As for workaround, I think one could achieve similar results with subplots and visible/hidden axis, but it would require a bit of overhead ...

Cheers,

Antoine





More information about the users mailing list