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
.