我在matlab工作,我有一个矩阵,我希望通过给每列/每行的最低值提供绿色颜色并将红色显示为其余的红色或不同的红色等级来显示它。关于这个值距离最低值有多近或多远,最后打印出值。例如,假设我有以下矩阵:
0.0085 0.0244 0.0335 0.0312 0.0392 0.0392
0.0246 0.0078 0.0234 0.0281 0.0395 0.0395
0.0299 0.0295 0.0108 0.0224 0.0598 0.0598
0.0253 0.0317 0.0236 0.0123 0.0583 0.0583
0.0363 0.0337 0.0500 0.0497 0.0038 0.0583
我想要实现的是这样的:
无论如何都有办法实现上述结果?
我正在检查pcolor或imagesc功能,但我无法与之相处。我发现这些链接here和here他们试图做类似的事情,但我无法让它改变我的需要。因此,有没有人知道是否有可能做到这样的事情以及如何做?
感谢。
更新
如果我想在顶部和侧面添加一些标题栏,请查看以下内容:
答案 0 :(得分:2)
您可以在每列上找到最小值,并创建一个矩阵,将颜色与最小值的相应索引相关联。
此示例为每列的最小值创建颜色。
[~, idx] = min(A);
M = zeros(size(A));
for iCol = 1:size(A,2)
M(idx(iCol), iCol) = 1;
end
imagesc(M);
同样,您可以创建一个函数来为每个值指定所需的颜色。 如果您每个都打印值的字符串,则可以使用文本函数。
答案 1 :(得分:2)
这是一个快速选项:
A = [0.0085 0.0244 0.0335 0.0312 0.0392 0.0392
0.0246 0.0078 0.0234 0.0281 0.0395 0.0395
0.0299 0.0295 0.0108 0.0224 0.0598 0.0598
0.0253 0.0317 0.0236 0.0123 0.0583 0.0583
0.0363 0.0337 0.0500 0.0497 0.0038 0.0583];
back = [1 0 0];
headers = [0.5 0.5 0.5];
minima = [0 1 0];
map = [back ; headers; minima];
colormap(map)
[~,ind] = min(A);
B = zeros(size(A));
for k = 1:size(A,2)
B(ind(k),k) = 1;
end
B = [ones(1,size(B,2))*0.5;B];
B = [ones(size(B,1),1)*0.5 B];
imagesc(B)
axis off
[y,x]=ndgrid((1:size(A,1)),(1:size(A,2)));
row_titles = num2str((1:size(A,1)).'); % could be any vector...
text(ones(size(A,1),1),2:size(A,1)+1,row_titles,'FontSize',16,'HorizontalAlignment','center',...
'VerticalAlignment','middle','Color','w')
coloumn_titles = num2str((1:size(A,2)).'); % could be any vector...
text(2:size(A,2)+1,ones(size(A,2),1),coloumn_titles,'FontSize',16,'HorizontalAlignment','center',...
'VerticalAlignment','middle','Color','w')
text(x(:)+1,y(:)+1,num2str(A(:)),'FontSize',16,'HorizontalAlignment','center',...
'VerticalAlignment','middle')
给出:
您可以更改headers
,back
和minima
颜色以适合您喜欢的风格。
答案 2 :(得分:1)
您可以使用insertText
创建它。
使用类似下面的示例:
A = [0.0085 0.0244 0.0335 0.0312 0.0392 0.0392
0.0246 0.0078 0.0234 0.0281 0.0395 0.0395
0.0299 0.0295 0.0108 0.0224 0.0598 0.0598
0.0253 0.0317 0.0236 0.0123 0.0583 0.0583
0.0363 0.0337 0.0500 0.0497 0.0038 0.0583];
I = zeros(92, 348, 3, 'uint8');
I(:,:,1) = 255;I(:,:,2) = 199;I(:,:,3) = 206; %Background color
text_str = cell(length(A(:)), 1);
box_color = zeros(length(A(:)), 3);
text_color = zeros(length(A(:)), 3);
position = zeros(length(A(:)), 2);
for y = 0:size(A, 1)-1
for x = 0:size(A,2)-1
index = y*size(A,2) + x + 1;
val = A(y+1, x+1);
text_str{index} = [' ', num2str(val, '%0.4f'), ' '];
position(index, 1) = x*58 + 1;
position(index, 2) = y*18 + 1;
if (val == min(A(:, x+1)))
%Green
box_color(index, :) = uint8([198, 239, 206]);
text_color(index, :) = uint8([0, 100, 0]);
else
%Red
box_color(index, :) = uint8([255, 199, 206]);
text_color(index, :) = uint8([100, 0, 0]);
end
end
end
I = insertText(I, position, text_str, 'FontSize', 12, 'BoxColor', box_color, 'TextColor', text_color, 'BoxOpacity', 1);
figure;imshow(I);
注意:在较新版本的Matlab(比我使用的更新版本)中,您也可以选择字体。