我有一个数值集X,Y,Z,我想用这些值复制一个热图。箱体的尺寸为20×20,X轴和Y轴的范围为-150至150,颜色为Z。在该bin中,它应该包含该范围内Z值的平均值。
在原产地包含这个工具,用平均值制作一个热图,但是我想用MATLAB来做。我在1中制作的图,我想在MATLAB中做,可以在图中看到。

我试过
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');但它打印了这个警告
警告:更新HeatmapChart时出错。源表变量'x‘中的值不归为离散类别。使用离散化函数对值进行分组。
发布于 2020-05-09 00:24:03
heatmap需要离散的x和y值。你的目标是把你的x和y放入20个离散的垃圾箱,平均每个垃圾箱的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的警告。
https://stackoverflow.com/questions/61686647
复制相似问题