[Scilab-users] ?==?utf-8?q? Axis break with Scilab ?

Antoine Monmayrant amonmayr at laas.fr
Wed Nov 23 16:38:50 CET 2016


Hi Rafael,

Thanks for this version that does the trick.
Adding some "---//---" at the break should be almost perfect.
I had something similar in mind, but there is one issue: when placing a zoom box or a datatip after the first or second break, the reported X value is clearly not corresponding to the xticks...

Cheers,

Antoine

 
Le Mercredi, Novembre 23, 2016 15:05 CET, Rafael Guerra <jrafaelbguerra at hotmail.com> a écrit: 
 
> 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
> 
> 
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users
>




More information about the users mailing list