在集合 X、Y、Z 中生成热图,其中 Z 是颜色的强度

Generate a heatmap in a set X, Y, Z with Z being the intensity of the color

我有一个数值集 X、Y、Z,我想用这些值重现热图。 bin 的大小为 20 x 20,X 轴和 Y 轴的范围为 -150 到 150,Z 为颜色。在该区间内,它应包含该范围内 Z 值的平均值。

在 Origin 中包含此工具,可以使用值的平均值制作热图,但我想在 MATLAB 中完成。我在 Origin 中制作的图表以及我想在 MATLAB 中制作的图表可以在图 1.

中看到

我试过

load xyz.dat 
x = xyz(:,1); 
y = xyz(:,2);
z = xyz(:,3); 
tbl = table(x,y,z); 
h = heatmap(tbl,'x','y','ColorVariable','z','ColorMethod','mean');

但是它打印了这个警告

Warning: Error updating HeatmapChart. Values in the source table variable 'x' are not grouped into discrete categories. Use the discretize function to group your values.

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 的警告。