通过MATLAB中的分类数据绘制色线图

时间:2019-08-05 10:13:26

标签: matlab

我有一个矩阵,其中包含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应该具有相同的颜色

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

当然,一旦了解了主要流程,就可以压缩代码。 这将产生: enter image description here

答案 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);