How to avoid displaying zero-values in confusion matrix

后端 未结 2 1228
情深已故
情深已故 2021-01-25 17:57

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

相关标签:
2条回答
  • 2021-01-25 18:16

    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

    0 讨论(0)
  • 2021-01-25 18:17

    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

    0 讨论(0)
提交回复
热议问题