使用Matlab。
这似乎是一个非常简单的问题,但是我无法解决它。我希望使用填充函数(或类似的东西)用数字序列中的颜色表示相同的值。
例如:
a = [1 1 1 2 2 1 3 3 3 4 5 5];
每组数字用一种颜色表示。如下图所示:
我已经能够在条形图上执行此操作,但是我想看看是否可以使用填充功能(或类似的东西)来更好地直观地表示差异。
提前致谢
答案 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