使用 Matlab。
这似乎是一个非常简单的问题,但是我无法解决它。我正在寻找使用填充函数(或类似的东西)来表示具有来自数字序列的颜色的相同值。
例如:
a = [ 1 1 1 2 2 1 3 3 3 4 5 5];
其中每组数字由一种颜色表示。如下所示:
我已经能够在条形图上做到这一点,但是我想看看是否可以使用填充功能(或类似的东西)来更好地表示视觉上的差异。
提前致谢
使用 Matlab。
这似乎是一个非常简单的问题,但是我无法解决它。我正在寻找使用填充函数(或类似的东西)来表示具有来自数字序列的颜色的相同值。
例如:
a = [ 1 1 1 2 2 1 3 3 3 4 5 5];
其中每组数字由一种颜色表示。如下所示:
我已经能够在条形图上做到这一点,但是我想看看是否可以使用填充功能(或类似的东西)来更好地表示视觉上的差异。
提前致谢
如果您想将整数映射到一组颜色,您可以定义一个插入颜色图的函数。颜色图通常用于热图等,例如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) 并且它会给您类似的结果。然而,列出的方法允许您定义自己的自定义颜色图并对其进行插值。
我得到的解决方案如下,虽然它可能有点复杂,并且有一些简单的方法对我有用。
%根据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