用填充函数Matlab表示值作为颜色

时间:2013-05-30 10:15:14

标签: matlab matlab-figure

使用Matlab。

这似乎是一个非常简单的问题,但是我无法解决它。我希望使用填充函数(或类似的东西)用数字序列中的颜色表示相同的值。

例如:

enter image description here

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

每组数字用一种颜色表示。如下图所示:

我已经能够在条形图上执行此操作,但是我想看看是否可以使用填充功能(或类似的东西)来更好地直观地表示差异。

提前致谢

2 个答案:

答案 0 :(得分: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)并且它会给你一个类似的结果。但是,列出的方法允许您定义自己的自定义色彩图并对其进行插值。

答案 1 :(得分: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