[Scilab-users] hist3d & density plots

amonmayr at laas.fr amonmayr at laas.fr
Mon Sep 10 12:57:44 CEST 2018


Le 10/09/2018 à 11:00, Stéphane Mottelet a écrit :
> Le 10/09/2018 à 09:56, antoine.monmayrant at laas.fr a écrit :
>> Hi all,
>>
>> I'm trying to plot the density of scatter points in (x,y).
>> Basically, I have a huge Xvec and a huge Yvec of same size that 
>> represents the position of a huge number of points in a 2D plane.
>> I would like to get a density plot, that is given a certain grid, a 
>> 2D plot representing the number of scatter points within a each cell 
>> of the grid.
>> In matplotib, this corresponds to functions like "hist2d" and "hexbin".
>> Is there any equivalent in Scilab?
>> Or do I have to calculate by hand my density matrix and then use 
>> graplot or contourfill to plot my density?
>> Any pointer at the least inefficient way to do this calculation is 
>> more than welcome...
>>
>> Thank you in advance for your help,
>>
>>
>> Antoine
>>
> Hello Antoine,
>
> The most efficient at the Scilab level would be to use the incremental 
> feature of "sparse":
>
> function d=bins2d(x,y,xbins,ybins)
>      n = size(x,"*");
>     [ix,cx] = dsearch(x,xbins);
>     [iy,cy] = dsearch(y,ybins);
>     kin = find((ix>0) & (iy>0));
>     d = full(sparse([ix(kin) iy(kin)], ones(kin), [size(xbins,"*")-1, 
> size(ybins,"*")-1]));
> end
>
> x = rand(10000,1,'normal');
> y = rand(10000,1,'normal');
>
> --> d = bins2d(x,y,-5:5,-5:5)
>  d  =
>
>    0.   0.   0.    0.     1.      0.      0.     0.    0.   0.
>    0.   0.   0.    3.     4.      4.      0.     0.    0.   0.
>    0.   0.   6.    31.    82.     80.     31.    2.    0.   0.
>    0.   0.   24.   183.   477.    477.    200.   25.   3.   0.
>    0.   5.   68.   439.   1131.   1158.   426.   57.   4.   0.
>    0.   5.   91.   485.   1168.   1220.   438.   72.   3.   0.
>    0.   4.   30.   190.   470.    472.    173.   21.   3.   0.
>    0.   0.   6.    30.    83.     78.     24.    2.    0.   0.
>    0.   1.   0.    2.     2.      3.      3.     0.    0.   0.
>    0.   0.   0.    0.     0.      0.      0.     0.    0.   0.
>
>
> --> sum(d)
>  ans  =
>
>    10000.
Thanks a lot, it works and is really fast even 2*10⁶ scatter points!
>
> This feature is fixed in scilab-branch-6.0:
Huh, what do you mean? Is there a new function bins2d or hist2d in 
scilab-branch-6.0?

Antoine
>
> S.
>

-- 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++

  Antoine Monmayrant LAAS - CNRS
  7 avenue du Colonel Roche
  BP 54200
  31031 TOULOUSE Cedex 4
  FRANCE

  Tel:+33 5 61 33 64 59
  
  email : antoine.monmayrant at laas.fr
  permanent email : antoine.monmayrant at polytechnique.org

+++++++++++++++++++++++++++++++++++++++++++++++++++++++




More information about the users mailing list