1

使用 Matlab。

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

例如:

在此处输入图像描述

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

其中每组数字由一种颜色表示。如下所示:

我已经能够在条形图上做到这一点,但是我想看看是否可以使用填充功能(或类似的东西)来更好地表示视觉上的差异。

提前致谢

4

2 回答 2

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 回答
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 回答