Matlab 二维密度图

Matlab 2-D density plot

我正在尝试为包含两列不同范围的数据绘制密度图。 RMSD 列为 [0-2],角度为 [0-200] 范围。

我的文件中的数据是这样的:

0.0225370 37.088  
0.1049553 35.309  
0.0710002 33.993  
0.0866880 34.708  
0.0912664 33.011  
0.0932054 33.191  
0.1083590 37.276  
0.1104145 34.882  
0.1027977 34.341  
0.0896688 35.991  
0.1047578 36.457  
0.1215936 38.914  
0.1105484 35.051  
0.0974138 35.533  
0.1390955 33.601  
0.1333878 32.133  
0.0933365 35.714  
0.1200465 33.038  
0.1155794 33.694  
0.1125247 34.522  
0.1181806 37.890  
0.1291700 38.871  
  1. 我希望 x 轴和 y 轴都装箱到范围的 1/10
  2. 两个轴的0在同一个开始
  3. 像这样打印矩阵每个格子中的元素个数,并根据这些元素个数制作密度图

       0 0.1 0.2 (RMSD)   
    0  0 1 3
    20 2 0 4
    40 1 0 5
    60 0 0 2
    (Angle)
    

我可以找到进行一维分箱的方法,但后来我对如何根据这些值制作密度图感到困惑,甚至不敢尝试二维分箱 + 绘图。

感谢您的帮助

我想你想要 hist3。假设你想指定 bin edges(不是 bin 中心),使用

result = hist3(data, 'Edges', {[0 .1 .2], [0 20 40 60]}).';

其中 data 表示您的数据。

来自链接文档:

hist3(X,'Edges',edges), where edges is a two-element cell array of numeric vectors with monotonically non-decreasing values, uses a 2-D grid of bins with edges at edges{1} in the first dimension and at edges{2} in the second. The (i,j)th bin includes the value X(k,:) if

edges{1}(i) <= X(k,1) < edges{1}(i+1)
edges{2}(j) <= X(k,2) < edges{2}(j+1)

根据您的示例数据,这给出了

result =
     0     0     0
     8    14     0
     0     0     0
     0     0     0

对于那些没有 Statistics and Machine Learning Toolbox to run bivariate histogram (hist3) 的人,使用替代方案来解决二维 hist 问题可能更实用。以下函数生成相同的输出

function N = hist3_alt(x,y,edgesX,edgesY)
N = zeros(length(edgesY)-1,length(edgesX)-1);
[~,~,binX] = histcounts(x,edgesX);
for ii=1:numel(edgesX)-1
    N(:,ii) = (histcounts(y(binX==ii),edgesY))';
end

简单高效。然后你可以 运行 这样的函数:

N = hist3_alt(x,y,[0:0.1:2],[0:20:200])