1

マトラブを使用。

これは非常に単純な問題のように思えますが、解決できませんでした。塗りつぶし関数 (または同様のもの) を使用して、一連の数字から同じ値を色で表すことを検討しています。

例えば:

ここに画像の説明を入力

= [ 1 1 1 2 2 1 3 3 3 4 5 5];

数字の各グループは色で表されます。以下に示すように:

棒グラフでこれを行うことができましたが、視覚的に違いをより適切に表現するために塗りつぶし機能 (または同様のもの) を使用できるかどうかを確認したかったのです。

前もって感謝します

4

2 に答える 2

0

私がたどり着いた解決策は次のとおりですが、もう少し複雑かもしれませんが、私にとっては簡単な方法があります。

% X の最大数に基づいて色を生成します gen_colors = rand(max(X),3);

%create the map store to hold each record
mapstore = [];

%assign the colours to each id
for i=1:size(X,1)

    %Obtain the correct ID ready to assign colour
    sI = X(i);

    %Pass over the correct ID for each row ID
    mapstore = [mapstore; gen_colors(sI,:)];
end

%Pass over the selected segment row colours to be formated
map = colormap(mapstore);

%Create an image with the segments to display
image(repmat(cat(3, map(:,1)', map(:,2)', map(:,3)'), 20, 1));

% Remove ticks we dont want, and add a few relavant ones
%Pass ind to highlight where the keyframes are placed on the plot
set(gca, 'ytick', 0, 'xtick', ind);

%styling
axis equal
axis tight
axis xy
于 2013-08-10T15:52:22.670 に答える
0

整数を一連の色にマップしたい場合は、カラーマップを補間する関数を定義できます。カラーマップは、ヒート マップなどでよく使用されます。例: http://www.mathworks.com/help/matlab/ref/colormap.html

それらを使用して、遭遇する最大値を知っていれば、整数を特定の色にマップできます。1 から 5 を入力したので、最大の整数として 5 を使用します。

cm = jet; % use the Jet colormap
n = 5; % largest integer

color1 = interp1(linspace(0, 1, size(cm, 1)), cm, 1/n)
color2 = interp1(linspace(0, 1, size(cm, 1)), cm, 2/n)
color3 = interp1(linspace(0, 1, size(cm, 1)), cm, 3/n)
color4 = interp1(linspace(0, 1, size(cm, 1)), cm, 4/n)
color5 = interp1(linspace(0, 1, size(cm, 1)), cm, 5/n)

結果 (RGB 形式で記述) は次のとおりです。

color1 =

         0    0.3500    1.0000


color2 =

    0.1375    1.0000    0.8625


color3 =

    0.9250    1.0000    0.0750


color4 =

    1.0000    0.2875         0


color5 =

    0.5000         0         0

jet(5) を呼び出すだけで同様の結果が得られることを考えると、ここでは少しやり過ぎたことに注意してください。ただし、リストされているアプローチでは、独自のカスタム カラーマップを定義して補間することができます。

于 2013-05-30T12:13:32.267 に答える