2016-09-15 3 views
1

私はmatlabで作業していますが、行列/行と赤の最低値に緑色の値を与えることで視覚化したい行列があります残りの部分や異なるレベルの赤い灰色の部分は、この値が最低値からどの程度近いか遠いかによって決まり、最後に値を印刷します。上記の結果を達成するために、とにかく方法はmatlabの行列の値をプロットする方法

enter image description here

があります:

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..0583 0.0583 
0.0363 0.0337 0.0500 0.0497 0.0038 0.0583 

このような何か私が達成したいです。たとえば、私は次の行列を持っていることを言うことができますか?

私はpcolorまたはimagesc関数をチェックしていましたが、何か問題はありませんでした。私はこれらのリンクを見つけましたherehere彼らは何か似たようにしようとしますが、私はそれを私のニーズに変更することができませんでした。したがって、誰かがそれができるような何かが可能かどうか、どのように知っていますか?

ありがとうございました。


アップデート:私は上と側にもいくつかのタイトルバーを追加したい場合は

、下記をご覧:

enter image description here

+0

これは、MATLABをEXCELに強制しようとしているようです... – EBH

+1

これをMATLABからExcelに転送する時間を節約したいだけです。以来、私は視覚化の部分だけが必要であり、それはなぜこれを時間を費やすのmatlabでまっすぐに行うことができます。あなたの答えは他の人にも役立つと思います。さて、もう一度ありがとう;-)。 – ThT

答えて

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..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') 

います:

minfig

を、あなたがお好みのスタイルに合わせてheadersbackminima色を変更することができます。

+0

答えてくれてありがとう、それはあなたが正しい答えを持っているという理由で、ロテムの答えに関してはかなり効率が良いようです。ただし、タイトルバーを追加したい場合は、私の最初の投稿で私の更新をチェックしてください。 – ThT

+0

完璧な、そのトリックを行います。もう一度おねがいします:-) – ThT

+1

また、forループは次の代替コードでスキップすることができます。 rows = 1:size(A、2); linInd = sub2ind(size(A)、ind、rows); B(linInd)= 1; him = imagesc(B); といくつかの透明度を追加できます。 セット(him、 'AlphaData'、0.5); – ThT

2

は、あなたが最小を見つけることができますそれぞれの列で、最小の対応するインデックスに色を関連付ける行列を作成します。

この例では、各列の最小値の色を作成します。

[~, idx] = min(A); 
M = zeros(size(A)); 
for iCol = 1:size(A,2) 
    M(idx(iCol), iCol) = 1; 
end 
imagesc(M); 

同様に、各値に目的の色を割り当てる関数を作成することができます。 値の文字列をそれぞれ印刷する場合は、text関数を使用できます。

+0

ありがとう@serigadoあなたの答えはBMHのものと同じ経路にあります;-) – ThT

+0

実際にBMHの答えは、私が言ったように、カラーバーを実装し、テキスト関数で文字列を追加しました。 – serigado

+0

正直言って、私が私のことを書いたとき、私はあなたの答えを見ませんでした。私がそれを掲示した後で、私はあなたが同じ方向に何かを提案したのを見た。私はそれが完全な解決策を提供するので、他の部分も重要です( 'text'を正しく使う方法など)。とにかく、私のupvoteも持っています;) – EBH

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..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の(私は使用されるよりも、より新しい)の新しいバージョンでは、あなたはまた、フォントを選択することができます。ここで

enter image description here

+0

答えてくれてありがとう。あなたのソリューションでは、EBHの回答に関してより多くのカスタマイズを適用できると思いますが、EBHはコードの行でも理解しやすく、効率的です。私はあなたの答えを正しいと記すことができたら、私はそれをするだろうが、残念ながら私はできない。あなたは私のupvoteを得た;-)。タイトルバーを追加するのはどうですか? – ThT

+0

EBHの答えは絶対に良いです、彼はまた私からupvoteを得ました。 – Rotem

関連する問題