web-dev-qa-db-ja.com

色と値が表示されたマトリックスを視覚化するにはどうすればよいですか?

MATLABを使用して、倍精度行列からこのような画像を作成したいと思います。

サンプル画像: alt text

http://twitpic.com/2xs94

48
Piji

この種のプロットは、組み込み関数 imagesc および text を使用して簡単に作成できます。グラフィックスオブジェクト。以下に例を示します。

mat = Rand(5);           % A 5-by-5 matrix of random values from 0 to 1
imagesc(mat);            % Create a colored plot of the matrix values
colormap(flipud(gray));  % Change the colormap to gray (so higher values are
                         %   black and lower values are white)

textStrings = num2str(mat(:), '%0.2f');       % Create strings from the matrix values
textStrings = strtrim(cellstr(textStrings));  % Remove any space padding
[x, y] = meshgrid(1:5);  % Create x and y coordinates for the strings
hStrings = text(x(:), y(:), textStrings(:), ...  % Plot the strings
                'HorizontalAlignment', 'center');
midValue = mean(get(gca, 'CLim'));  % Get the middle value of the color range
textColors = repmat(mat(:) > midValue, 1, 3);  % Choose white or black for the
                                               %   text color of the strings so
                                               %   they can be easily seen over
                                               %   the background color
set(hStrings, {'Color'}, num2cell(textColors, 2));  % Change the text colors

set(gca, 'XTick', 1:5, ...                             % Change the axes tick marks
         'XTickLabel', {'A', 'B', 'C', 'D', 'E'}, ...  %   and tick labels
         'YTick', 1:5, ...
         'YTickLabel', {'A', 'B', 'C', 'D', 'E'}, ...
         'TickLength', [0 0]);

そして、これはこれが生成する図です:

alt text

選択したx軸の目盛りラベルが幅が広すぎて互いに重なり合っている場合に問題が発生した場合は、次のように処理できます。

  • MATLABの新しいバージョン:これがどのバージョンに追加されたかはわかりませんが、新しいバージョンのAxesオブジェクトには properties'{X|Y|Z}TickLabelRotation'。ラベルを回転させて、より適切にフィットさせることができます。

  • MATLABの古いバージョン:古いバージョンでは、 MathWorks File Exchange で目盛りラベルテキストを回転できるサブミッションを見つけることができます、 XTICKLABEL_ROTATE from Brian Katz .

89
gnovice
h = imagesc(magic(8))
impixelregion(h)

http://www.mathworks.com/help/toolbox/images/ref/impixelregion.html

Image Processing Toolboxが必要 alt text

18
MatlabDoug

Matlabにそれを描くように説得できると思います。FileExchangeを見ると、誰かがすでにコードを書いていることがわかるかもしれません。ただし、コードがない場合は、MS Excelを使用する方がはるかに簡単です。

編集:それで、私はこれにもう少し考えを与えました、そして、ここで私は思いついたものです。私はSOにグラフィックを投稿することをマスターしていないので、私を信じてください。これはあなたを解決に導きます。しかし、正直なところExcelの方が簡単です。

まず、データ値でマトリックスを定義します。以下では、マトリックスをGと呼びます。次に、コマンドを実行します。

image(G); 
colormap(gray)

今、私は良いグラフィックを得るために、いじり回し、データを再スケーリングしなければなりませんでしたが、これは数値軸を持つグレースケールのプロットを生成するはずです。次に、Figureウィンドウに移動して、プロットツールを開きます。

X軸を選択し、Ticksボタンを押します。あとは、必要なテキストにラベルを編集するだけです。 Y軸についても同じことを行います。プロット上の四角に数字を書きます-注釈メニューのテキストボックスを使用します。

多くのことをいじると、必要なグラフィックが手に入ります。この時点で、メニューコマンドの[ファイル]を選択することをお勧めします。 M-Fileを生成し、それを行います。将来、このようなグラフィックスをプログラムで作成する場合は、生成されたMファイルを、必要な機能を果たす適切な関数に変換するだけです。

ただし、Excelの方がはるかに簡単です。

行列内のゼロ/ゼロ以外のエントリのみを表示する場合(スパースの場合など)、 spy を使用します。

それ以外の場合は、 imagesc を使用します。

PS:あなたの画像にアクセスできません

1
Jacob