【发布时间】:2014-07-17 11:00:46
【问题描述】:
我在数组transitions=zeros(101,101) 的区间 [0,1] 中采样了数据,我想将其绘制为 3D 直方图。 transitions 填充的数据类似于此线程末尾提供的示例数据。
第一列是第一个观察变量X,第二列是第二个变量Y,第三列是归一化频率。 IE。对于第一行:观察到的变量对 (0,0) 的归一化频率为 0.9459。 (0,Y)thus 的归一化频率之和为 1。
我尝试使用以下代码制作(某种程度的)3D 直方图:
x_c = (transitions(:,1) * 100)+1;
y = (transitions(:,2) * 100)+1;
z = transitions(:,4);
%A = zeros(10,10);
A = zeros(max(x_c),max(y));
for i = 1:length(x_c)
try
if(z(i)>0)
A(int32(x_c(i)), int32(y(i))) = abs(log(z(i)));
else
% deal with exceptions regarding log(0)
A(int32(x_c(i)), int32(y(i))) = 0;
end
catch
disp('');
end
end
bar3(A);
但是,由于它是离散空间A 中的采样数据,因此输出如下图所示。这在某种程度上具有误导性,因为图中存在“间隙”(对于没有采样数据的坐标,z 值 = 0)。我宁愿将采样数据分配给它们相应的图,从而产生一个“真实的”3d 直方图。
顺便说一句,由于我创建A 的“hack”,x-、y- 和 z 比例也不正确。 3D 直方图的轴(全部三个)应在 [0,1] 的区间内。
ans =
0 0 0.9459
0 0.0500 0.0256
0 0.1000 0.0098
0 0.1100 0.0004
0 0.1500 0.0055
0 0.1600 0.0002
0 0.2000 0.0034
0 0.2100 0.0001
0 0.2500 0.0024
0 0.2600 0.0001
0 0.3000 0.0018
0 0.3200 0.0000
0 0.3700 0.0000
0 0.4000 0.0010
0 0.4200 0.0000
0 0.4500 0.0007
0 0.5000 0.0007
0 0.5300 0.0000
0 0.5500 0.0005
0 0.6000 0.0005
0 0.6300 0.0000
0 0.7000 0.0002
0 0.7400 0
0 0.7500 0.0003
0 0.7900 0.0000
0 0.8000 0.0002
0 0.8400 0.0000
0 0.8500 0.0002
0 0.8900 0.0000
0 0.9000 0.0002
0 0.9500 0.0001
0 1.0000 0.0001
0.0500 0 0.0235
0.0500 0.0500 0.0086
0.0500 0.1000 0.0045
. . .
. . .
. . .
. . .
. . .
0.9500 0.9000 0.0035
0.9500 0.9500 0.0066
0.9500 1.0000 0.0180
1.0000 0 0.0001
1.0000 0.0500 0.0001
1.0000 0.1000 0.0001
1.0000 0.1100 0.0000
1.0000 0.1500 0.0001
1.0000 0.1600 0.0000
1.0000 0.2000 0.0001
1.0000 0.2100 0.0000
1.0000 0.2500 0.0001
1.0000 0.2600 0.0000
1.0000 0.3000 0.0001
1.0000 0.3200 0.0000
1.0000 0.3700 0.0000
1.0000 0.4000 0.0002
1.0000 0.4200 0
1.0000 0.4500 0.0002
1.0000 0.5000 0.0003
1.0000 0.5300 0.0000
1.0000 0.5500 0.0004
1.0000 0.6000 0.0004
1.0000 0.6300 0.0000
1.0000 0.7000 0.0007
1.0000 0.7400 0.0000
1.0000 0.7500 0.0010
1.0000 0.7900 0.0000
1.0000 0.8000 0.0015
1.0000 0.8400 0.0001
1.0000 0.8500 0.0024
1.0000 0.8900 0.0002
1.0000 0.9000 0.0042
1.0000 0.9500 0.0111
1.0000 1.0000 0.3998
【问题讨论】:
-
你为什么不用
hist3? -
这给出了错误的结果。据我所知, hist/hist3 仅适用于实际数据量。在我的例子中,第三列包含数据量的总和(另外是标准化的)。
标签: matlab 3d histogram sample-data