heatmap
期望离散的 x 和 y 值。你的目标是将你的 x 和 y 分成 20 个离散的 bin 并平均每个 bin 的 z 值,但 x 和 y 本身是连续的。
为了实现您的目标,请听取警告消息的建议并使用discretize
您的 x 和 y 值进行分类。
% I used the following stand ins for your data:
% x = rand(540, 1);
% y = rand(540, 1);
n_bins = 20; % Number of grid cells
% If you want the width of the grid cell to be 20, use
% n_bins = (max(x) - min(x)) / 20;
x_discrete = discretize(x, n_bins);
y_discrete = discretize(y, n_bins);
tbl = table(X_discrete,y_discrete,z, 'VariableNames', {'x', 'y', 'z'});
h = heatmap(tbl,'x','y','ColorVariable','z','ColorMethod','mean');
注意:为什么这不是样本数据的问题?
使用您的样本数据,
x = [49.8, 14.5, -60.7, -21.6, -10.6];
y = [45.3, 7.9, 23.9, -58.5, -55.4];
z = [0.2 , -0.06, -0.35, -0.15, -0.08];
tbl = table(x',y',z', 'VariableNames', {'x', 'y', 'z'});
h = heatmap(tbl,'x','y','ColorVariable','z','ColorMethod','mean');
不会抛出错误,因为它将每个 x 和 y 值视为一个单独的类别。heatmap
使用调用categorical
将连续值转换为分类值。
除了没有真正提供您想要的输出(每个点将是它自己的盒子而不是平均网格单元)之外,categorical
它似乎对它将创建的分类值的数量有限制。我无法找到任何关于该限制究竟是什么的文档,但通过实验,它在 200 年代中期达到顶峰。由于您的向量长度为 540 个元素,因此您会收到有关使用的警告discretize
。