[Scilab-users] hist3d & density plots

Stéphane Mottelet stephane.mottelet at utc.fr
Mon Sep 10 13:03:05 CEST 2018


Le 10/09/2018 à 12:57, amonmayr at laas.fr a écrit :
> 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?
No. "sparse" is broken in scilab-6.0.1, but fixed in scilab-branch-6.0. 
Hence the above code will work in scilab-5.5.2 or >= branch-6.0

S.
>
> Antoine
>>
>> S.
>>
>

-- 
Stéphane Mottelet
Ingénieur de recherche
EA 4297 Transformations Intégrées de la Matière Renouvelable
Département Génie des Procédés Industriels
Sorbonne Universités - Université de Technologie de Compiègne
CS 60319, 60203 Compiègne cedex
Tel : +33(0)344234688
http://www.utc.fr/~mottelet




More information about the users mailing list