Heat Map Representation of error data

13 次查看(过去 30 天)
I have an error matrix consisting of positive and negative difference between the theoritical and practical values. I want to select the cell containing lowest positive number using heat map and ignore the negative numbers. How to do that ?
P.S. : This is a part of bigger program where difference in RMSE values of training and validation datasets represents the above error matrix.

回答(1 个)

Mathieu NOE
Mathieu NOE 2023-9-14
hello
I could suggest these two solutions
either based on the regular heatmap function and creating a specific colormap
the limited range that includes your min positive value is coded in red (up to you to change to another color)
or second solution is based on a Fex submission (as far as I can remember, tx to his creator !)
err = readmatrix("Error Matrix.xlsx");
err_pos = err;
err_pos(err_pos<0) = NaN;
[min_val,id]= min(err_pos,[],'all','linear'); % min positive value and linear indice
[r,c] = ind2sub(size(err),id); % convert linear indice to row / col indices
%% solution #1
figure(1)
max_val = max(abs(err),[],'all');
% this colormap will span values from -max_val to +max_val
n = 2*ceil(max_val/min_val)+1; % odd number
cmap = gray(n);
% create a "red" zone between 0 and a value slightly above the min error
rz = (n-1)/2; % row index correponding to zero
cmap((rz:rz+2),1) = 1; %
cmap((rz:rz+2),2:3) = 0; %
% create the heatmap
h = heatmap(err,'GridVisible',false);
% apply the colormap
colormap(cmap)
% % apply the color limits (full range of the data)
caxis([-max_val max_val])
%% solution #2
figure(2)
matvisual(err, 'annotation')
hold on
plot(c,r,'ro','markersize',60);
hold off
% +------------------------------------------------------+
% | Matrix Visualization with MATLAB Implementation |
% | |
% | Author: Ph.D. Eng. Hristo Zhivomirov 12/02/18 |
% +------------------------------------------------------+
%
% function: matvisual(A, varargin)
%
% Input:
% A - m-by-n-by-p matrix to be visualized
% varargin - type 'annotation' in the place of varargin if one wants to
% annotate the matrix plot (x-label, y-label, etc.)
% example :
% %% generate a test matrix
% % A = eye(10);
% % A = magic(30);
% % A = ones(10);
% % A = zeros(10);
% % A = NaN(10);
% % A = Inf(10);
% % A = rand(20, 10, 3);
% A = round(10*rand(50, 50));
% % A = round(10*rand(10, 5, 5));
% % A = abs(fft(1:10));
% % A = complex(rand(5,5), rand(5,5));
% % A = char(1300*ones(10));
% % A = zeros(0, 20);
%
% %% visualize the matrix
% matvisual(A, 'annotation')
function matvisual(A, varargin)
% input validation
validateattributes(A, {'single', 'double', 'logical'}, ...
{'3d', 'nonempty', 'real'}, ...
'', 'A', 1)
% determine the matrix size
[M, N, P] = size(A);
% loop through the matrix pages
for p = 1:P
% get prepared for page-by-page visualization
if P > 1, subplot(1, P, p), end
% visualize the matrix
himg = imagesc(A(:, :, p));
grid on
% values labeling
for m = 1:M
for n = 1:N
text(n, m, num2str(A(m, n, p), 3), ...
'FontName', 'Times New Roman', ...
'FontSize', round(6 + 50./sqrt(M.*N)), ...
'HorizontalAlignment', 'center', ...
'Rotation', 45)
end
end
% annotation
if strcmp(varargin, 'annotation')
% x-label, y-label, x-ticks, y-ticks, title
set(gca, 'FontName', 'Times New Roman', 'FontSize', 12)
xlabel('Column number')
ylabel('Row number')
if P > 1, title(['Matrix page ' num2str(p)]), end
if M <= 50, set(gca, 'YTick', 1:M), end
if N <= 50, set(gca, 'XTick', 1:N), end
end
% set the datatip UpdateFcn
cursorMode = datacursormode(gcf);
set(cursorMode, 'UpdateFcn', {@datatiptxt, himg})
end
end
function text_to_display = datatiptxt(~, hDatatip, himg)
% determine the current datatip position
pos = get(hDatatip, 'Position');
% form the datatip label
text_to_display = {['Row: ' num2str(pos(2))], ...
['Column: ' num2str(pos(1))], ...
['Value: ' num2str(himg.CData(pos(2), pos(1)))]};
end
  1 个评论
Mathieu NOE
Mathieu NOE 2023-12-11
hello again
do you mind accepting my answer (if it has fullfiled your expectations ) ? tx

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Axis Labels 的更多信息

标签

产品


版本

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by