我有一个矩阵,其中包含24个样本和10,000个数据点x,每个点具有不同的强度y,我可以在执行plot(x,y)的线图中进行绘制,但是我有第三个变量z(24x1),这是分类的。我正在尝试对此进行绘制,以使同一类别中的每个样本都具有相同的颜色,但仍无法使用。
z的示例是(A,B,C,A,C,B,...)。
到目前为止,我已经尝试过
static
但我收到警告:
plot(x, y, 'color', z)
我在网上找到的所有指南都提供了类似的方法,但都无效。
我知道在R中,我将可以做某种形式的
Error using plot
Color value must be a 3 element vector
但是我没有使用matlab的经验,因此很困惑。
预期结果是一个图,其中z中同一组的每个样本都具有相同的颜色。任何帮助将不胜感激。
编辑:
这是一些示例数据。 X可以只是列号
matplot(x, y, color = z)
因此,样品1和3应该具有相同的颜色
答案 0 :(得分:1)
一种方法是为组绘制数据组,在这种情况下,MATLAB将自动分配其他颜色:
samples = [ ...
5 6 6 7 3
4 4 6 5 2
7 5 4 6 4
5 6 3 4 3];
groups = {...
'A'
'B'
'A'
'C' };
% generate x-values
x = repmat(1:size(samples,2), size(samples,1), 1);
axes(figure);
hold on;
handles = {};
for group = unique(groups')
idx = (strcmp(groups, group{1}));
xplot = x(idx,:);
splot = samples(idx,:);
handles{end+1} = plot(xplot(:), splot(:),'o');
end
要访问Line对象并更改其属性,请使用例如:
handles{3}.MarkerFaceColor = 'r';
答案 1 :(得分:1)
您需要扫描类别列(您的z
变量)并找到属于每个类别的行的索引。一旦有了,就可以按组(属于同一类别)绘制线并分配其保留的颜色。
一种实现方式:
%% Sample input data
Y = [ 5 6 6 7 3
4 4 6 5 2
7 5 4 6 4
5 6 3 4 3 ];
z = {...
'A'
'B'
'A'
'C' };
x = 1:size(Y,2) ; % just defined to be able to use the notation "plot(x,Y)"
Y = Y.' ; % Matlab is column major so transposed the matrix to have
% it the natural style (also can use "plot(x,Y)" this way)
%% Assign color for each category
% define any color you want for each category
categories_and_colors = { ...
'A' , [1 0 0] ; % 'Red' for category 'A'
'B' , [0 1 0] ; % 'Green' for category 'B'
'C' , [0 0 1] % 'Blue' for category 'C'
} ;
%% Find indices of vectors for each category
ncat = size(categories_and_colors,1) ;
plotcat = cell(ncat,1) ;
for k=1:ncat
thisCategory = categories_and_colors{k,1} ;
idxThisCategory = strcmpi( thisCategory , z ) ;
plotcat{k} = idxThisCategory ;
end
% the variable [plotcat] is a cell array which contains a cell per
% category. Each cell contains the logical indices of the matrix lines
% belonging to this category
%% Plot
figure
hold on
for k=1:ncat
plot( x , Y(:,plotcat{k}) , 'Color' , categories_and_colors{k,2} ) ;
end
答案 2 :(得分:1)
此代码应该有效
[~,~,types] = unique(category);
colormap jet
cmap = colormap;
con_min = 0;
con_max = max(types);
ind_c = round((size(cmap,1)-1)*types/(con_max-con_min))+1;
set(gca,'ColorOrder',cmap(ind_c,:),'NextPlot','replacechildren');
plot (x, y);