3

範囲が異なる 2 つの列を含むデータの密度プロットを実行しようとしています。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 ビニング + プロットを試みることさえできませんでした。

助けてくれてありがとう

4

2 に答える 2

1

欲しいと思いますhist3ビンの端(ビンの中心ではなく)を特定したい場合は、次を使用します

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

ここでdata、データを示します。

リンクされたドキュメントから:

hist3(X,'Edges',edges)ここで、edgesは単調に減少しない値をもつ数値ベクトルの 2 要素 cell 配列でありedges{1}、1 番目の次元が で、2 番目の次元が であるエッジを持つビンの 2 次元グリッドを使用しますedges{2}。( i, j) 番目のビンには次のX(k,:)場合の値が含まれます。

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
于 2015-04-20T13:41:08.300 に答える
0

二変量ヒストグラム ( hist3 ) を実行するためのStatistics and Machine Learning Toolboxがない場合は、別の手段を使用して 2 次元ヒスト問題を解く方が実用的かもしれません。次の関数は同じ出力を生成します

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-04-20T17:39:11.443 に答える