Как я могу добавить вертикальные линии к моей матрице путаницы, сгенерированной с помощью Matlab? - PullRequest
0 голосов
/ 17 января 2019

Я использовал следующий код для генерации своей путаницы, которую я нашел в Интернете:

    confmat = C;
    labels = {'0', '1', '2', '3', '11' };
    numlabels = size(confmat, 1); % number of labels
    confpercent = 100*confmat./repmat(sum(confmat, 1),numlabels,1);
    imagesc(confpercent);
    Mycolors=[0 0.7 0.4; 1 0.9 0.9 ]
    colormap(flipud(Mycolors));
    textStrings = num2str([confpercent(:)], '%.1f%%\n');
    textStrings = strtrim(cellstr(textStrings));
    [x,y] = meshgrid(1:numlabels);
    hStrings = text(x(:),y(:),textStrings(:), ...
        'HorizontalAlignment','center');
    midValue = mean(get(gca,'CLim'));
    textColors = repmat(confpercent(:) > midValue,1,3);
    set(hStrings,{'Color'},num2cell(textColors,2));
    set(gca,'XTick',1:numlabels,... 'XTickLabel',labels,... 'YTick',1:numlabels,... 'YTickLabel',labels,...  'TickLength',[0 0]);

Я получил следующую матрицу Here the one I have obtained

Хотя я хочу добавить вертикальные линии в мою матрицу, чтобы разделить значения, чтобы я мог получить похожую на следующую:

The one I am intersted to get

Я мог бы получить эти вертикальные линии, используя pcolor (confusion_matrix), но проценты сдвинуты в угол каждой сетки, и я получил следующую картинку: Picture obtained with pcolor

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Хорошо! Я нашел запрошенную вещь, чтобы получить вертикальную и горизонтальную линию, которая просто добавляет линии, используя plot и удерживая:

Я использовал следующий код в конце указанного в моем вопросе:

hold on
plot ([2 2],get(gca, 'YLim'), 'Color', [0.15, 0.15, 0.15],'LineWidth',0.5)
plot ([1 1],get(gca, 'YLim'), 'Color', [0.15, 0.15, 0.15],'LineWidth',0.5)
plot ([3 3],get(gca, 'YLim'), 'Color', [0.15, 0.15, 0.15],'LineWidth',0.5)
plot ([4 4],get(gca, 'YLim'), 'Color', [0.15, 0.15, 0.15],'LineWidth',0.5)

plot (get(gca, 'XLim'), [1 1], 'Color', [0.15, 0.15, 0.15],'LineWidth',0.5)
plot (get(gca, 'XLim'), [2 2], 'Color', [0.15, 0.15, 0.15],'LineWidth',0.5)
plot (get(gca, 'XLim'), [3 3], 'Color', [0.15, 0.15, 0.15],'LineWidth',0.5)
plot (get(gca, 'XLim'), [4 4], 'Color', [0.15, 0.15, 0.15],'LineWidth',0.5)

Я использовал 1, 2, 3 и 4, потому что у меня есть четыре класса, и в конце каждого прогноза результатов класса мне нужно построить линию. Надеюсь, что это будет полезно

0 голосов
/ 18 января 2019

Использовать другой axes объект

Классический трюк с MATLAB, когда приходится иметь дело с различными axes свойствами. По сути, мы собираемся создать новый axes объект, поместить его поверх драгоценного, затем сделать его прозрачным (без цвета фона), чтобы мы могли видеть, что позади, но мы будем держать линии сетки хорошо видимыми там, где мы хотим их.

Итак, сразу после вашего примера кода добавьте:

ax1 = gca  ; % get handle of initial axes
ax2 = axes ; % create new axe and retrieve handle

lim = [0 numlabels] ; % Prepare X and Y properties
tks = 0:numlabels ;

% superpose the new axe on top, at the same position
set(ax2,'Position', get(ax1,'Position') );

% make it transparent (no color)
set(ax2,'Color','none') ;

% set the X and Y properties
set(ax2, ...
    'XLim',lim,'XTick',tks,'XTickLabel','' ,...
    'YLim',lim,'YTick',tks,'YTickLabel','' ) ;

% now set your grid properties
set(ax2,'GridColor','k','GridAlpha',1)

Это даст вам ( данные немного отличаются, потому что я случайно сгенерировал матрицу путаницы ):

enter image description here

Конечно, теперь у вас есть полный контроль над линиями сетки, поэтому вы также можете уточнить, как они отображаются через свойства сетки axes. Несколько интересных свойств:

  • GridLineStyle - Стиль линии для линий сетки
  • GridColor - Цвет линий сетки
  • GridAlpha - Прозрачность линии сетки
  • LineWidth - Ширина линии

Для получения более подробной информации см. Документацию по Свойства осей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...