Постройте изображения как метки осей в MATLAB

Я строю «изображение» размером 7x7 пикселей в MATLAB, используя команду imagesc:

imagesc(conf_matrix, [0 1]);

Это представляет собой матрицу путаницы между семью различными объектами. У меня есть эскиз каждого из семи объектов, которые я хотел бы использовать в качестве меток осей. Есть простой способ сделать это?


person Bill Cheatham    schedule 31.01.2011    source источник
comment
Зная ширину/высоту осей, а также расстояние между делениями и пределы осей, вы можете рассчитать положение делений. Затем вы добавляете к изображению еще 14 осей для построения эскизов. Это возможно, но не просто.   -  person Jonas    schedule 31.01.2011
comment
Просто мысль: масштабирование яркости пикселей таким образом означает, что ячейки путаницы с наименьшим или наибольшим числом всегда будут отображаться как черно-белые. Может быть полезно рассмотреть возможность масштабирования каким-либо другим способом, поскольку разброс этих значений также является информативным. Например, если счетчики матрицы путаницы [900 40; 60 1000], значит совсем другое, чем были [510 480; 490 520], хотя относительный порядок ячеек тот же.   -  person Predictor    schedule 31.01.2011
comment
Спасибо, это хороший момент.   -  person Bill Cheatham    schedule 31.01.2011


Ответы (2)


Я не знаю простого способа. Свойства осей XtickLabel, которые определяют метки, могут быть только строками.

Если хотите не очень простой способ, то можно сделать что-то в духе следующего неполного (в смысле неполного решения) кода, создав одну метку:

h = imagesc(rand(7,7));
axh = gca;
figh = gcf;
xticks = get(gca,'xtick');
yticks = get(gca,'ytick');
set(gca,'XTickLabel','');
set(gca,'YTickLabel','');
pos = get(axh,'position'); % position of current axes in parent figure

pic = imread('coins.png');
x = pos(1);
y = pos(2);
dlta = (pos(3)-pos(1)) / length(xticks); % square size in units of parant figure

% create image label
lblAx = axes('parent',figh,'position',[x+dlta/4,y-dlta/2,dlta/2,dlta/2]);
imagesc(pic,'parent',lblAx)
axis(lblAx,'off')

Одна проблема заключается в том, что метка будет иметь ту же цветовую палитру, что и исходное изображение.

person Itamar Katz    schedule 31.01.2011
comment
Спасибо, я могу превратить это в то, что я хочу. Обидно за цветовую карту. Тем временем я собрал грязное решение, используя подзаголовки, которые я опубликую как отдельный ответ. - person Bill Cheatham; 31.01.2011

@Itmar Katz дает решение, очень близкое к тому, что я хочу сделать, которое я пометил как «принятое». Тем временем я сделал это грязное решение, используя подзаголовки, которые я привел здесь для полноты картины. Однако он работает только до входной матрицы определенного размера и хорошо отображается только тогда, когда фигура квадратная.


conf_mat = randn(5);
A = imread('peppers.png');
tick_images = {A, A, A, A, A};

n = length(conf_mat) + 1;

% plotting axis labels at left and top
for i = 1:(n-1)
    subplot(n, n, i + 1); 
    imshow(tick_images{i});
    subplot(n, n, i * n + 1);
    imshow(tick_images{i});
end

% generating logical array for where the confusion matrix should be
idx = 1:(n*n);
idx(1:n) = 0;
idx(mod(idx, n)==1) = 0;

% plotting the confusion matrix
subplot(n, n, find(idx~=0));
imshow(conf_mat);
axis image
colormap(gray)

введите здесь описание изображения

person Bill Cheatham    schedule 31.01.2011