Question

I plotted a confusion matrix in Matlab using the code from this link.

However whenever there is a zero on the cell it is still shown. How can I eliminate the printing of 0.00's on the cells?

Sample of my confusion matrix

enter image description here

Was it helpful?

Solution

After you removed all spaces, find '0.00' and substitute it with spaces again

idx = find(strcmp(textStrings(:), '0.00'));
textStrings(idx) = {'   '};

The complete code will then be:

mat = rand(5);           %# A 5-by-5 matrix of random values from 0 to 1
mat(3,3) = 0;            %# To illustrate
mat(5,2) = 0;            %# To illustrate
imagesc(mat);            %# Create a colored plot of the matrix values
colormap(flipud(gray));  %# Change the colormap to gray (so higher values are
                         %#   black and lower values are white)

textStrings = num2str(mat(:),'%0.2f');  %# Create strings from the matrix values
textStrings = strtrim(cellstr(textStrings));  %# Remove any space padding

%% ## New code: ###
idx = find(strcmp(textStrings(:), '0.00'));
textStrings(idx) = {'   '};
%% ################

[x,y] = meshgrid(1:5);   %# Create x and y coordinates for the strings
hStrings = text(x(:),y(:),textStrings(:),...      %# Plot the strings
                'HorizontalAlignment','center');
midValue = mean(get(gca,'CLim'));  %# Get the middle value of the color range
textColors = repmat(mat(:) > midValue,1,3);  %# Choose white or black for the
                                             %#   text color of the strings so
                                             %#   they can be easily seen over
                                             %#   the background color
set(hStrings,{'Color'},num2cell(textColors,2));  %# Change the text colors

set(gca,'XTick',1:5,...                         %# Change the axes tick marks
        'XTickLabel',{'A','B','C','D','E'},...  %#   and tick labels
        'YTick',1:5,...
        'YTickLabel',{'A','B','C','D','E'},...
        'TickLength',[0 0]);

This gives:

enter image description here

OTHER TIPS

does this work - do a loop over i and j (spatial dimensions) after textStrings is defined and before it is converted to cell, and set

textStrings(i,j,1:4)='    ';

depending on if mat(i,j) is really close to 0.00 using an if-else statement

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top