我正在使用imagesc
命令在MATLAB中绘制一个7x7像素的“图像”:
imagesc(conf_matrix, [0 1]);
这表示七个不同对象之间的confusion matrix。我有七个对象中的每个对象的缩略图,我想用它们作为轴刻度标签。有一个简单的方法吗?
答案 0 :(得分:3)
我不知道 easy 方式。确定标签的轴属性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')
一个问题是标签将与原始图像具有相同的色彩映射。
答案 1 :(得分:3)
@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)