【问题标题】:Matlab 2-D density plotMatlab 二维密度图
【发布时间】:2015-04-20 12:20:24
【问题描述】:

我正在尝试为包含具有不同范围的两列的数据绘制密度图。 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)
    

我可以找到进行 1-D 分箱的方法,但是我对如何根据这些值制作密度图感到困惑,甚至不敢尝试 2-D 分箱 + 绘图。

感谢您的帮助

【问题讨论】:

    标签: matlab binning density-plot


    【解决方案1】:

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

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

    data 表示您的数据。

    来自链接的文档:

    hist3(X,'Edges',edges),其中edges 是具有单调非递减值的数值向量的二元素元胞数组,它使用一个二维网格,其边缘在第一维edges{1} 和@987654328 @ 在第二。 (i,j)th bin 包含值 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
    

    【讨论】:

    • 我正在执行以下加载 rmsd_angle_all_combined.list ; >> 结果 = hist3(rmsd_angle_all_combined, 'Edges', {[0 .1 .2 .4 .6 .8 1 1.2 1.4 1.6 1.8 2], [0 20 40 60 80 100 120 140 160 180 200]})。 ; >>imagesc 这会导致图片在两个轴上都有 0-70。我在这里做错了什么?
    • @user1504209 我不知道...hist3的输出大小由边数决定
    【解决方案2】:

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

    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])
    

    【讨论】:

      猜你喜欢
      • 2015-12-20
      • 1970-01-01
      • 2016-06-20
      • 2013-08-07
      • 2017-11-01
      • 2018-12-15
      • 2014-04-14
      • 1970-01-01
      • 2013-07-08
      相关资源
      最近更新 更多