2013-07-11 137 views
0

我有一个矩阵X,我想用kmeans函数绘制它。我想要的:如果行在第4列中的值为1,我希望它是方形的如果行在第4列中的值为2,我希望它+形状,但如果该行的值为0第5列它必须是蓝色的,如果第5列中的行的值为1,它必须是黄色的我该如何绘制? MATLAB

(你不需要使用这些确切的颜色和形状,我只是想区分这些)这并没有工作:

plot(X(idx==2,1),X(idx==2,2),X(:,4)==1,'k.'); 

谢谢!!

+0

不确定明白你的意思。但我认为你可以简单地使用一个循环,并根据你的规格为每一行选择颜色。如果这是你的意思,那就试着回来。 – innoSPG

+0

我不想在MATAB中使用垂褶。怎么样,有4个参数,矩阵中每个不同值的组合都有不同的形状和颜色。 – user2574059

回答

0

基于关于kmeans documentation page我提出这个“嵌套”逻辑例如:

X = [randn(100,2)+ones(100,2);... 
    randn(100,2)-ones(100,2)]; 
opts = statset('Display','final'); 

% This gives a random distribution of 0s and 1s in column 5: 
X(:,5) = round(rand(size(X,1),1)); 

[idx,ctrs] = kmeans(X,2,... 
        'Distance','city',... 
        'Replicates',5,... 
        'Options',opts); 

hold on 
plot(X(idx==1,1),X(idx==1,2),'rs','MarkerSize',12) 
plot(X(idx==2,1),X(idx==2,2),'r+','MarkerSize',12) 

% after plotting the results of kmeans, 
% plot new symbols with a different logic on top: 

plot(X(X(idx==1,5)==0,1),X(X(idx==1,5)==0,2),'bs','MarkerSize',12) 
plot(X(X(idx==1,5)==1,1),X(X(idx==1,5)==1,2),'gs','MarkerSize',12) 
plot(X(X(idx==2,5)==0,1),X(X(idx==2,5)==0,2),'b+','MarkerSize',12) 
plot(X(X(idx==2,5)==1,1),X(X(idx==2,5)==1,2),'g+','MarkerSize',12) 

上面的代码是一个最小工作例如,给定的统计工具箱是可用的。
关键功能是绘图的嵌套逻辑。例如:

X(X(idx==1,5)==0,1) 

X(idx==1,5)选择用于其中idx==1X(:,5)这些值。从这些中,只考虑0的值:X(X(...)==0,1)。根据问题的逻辑,这应该是一个蓝色方块:bs
你有四种情况,因此有四个额外的情节线。

+0

谢谢!让我试试这个! – user2574059

+0

我做了一些调整,但它的工作原理!感谢 – user2574059

+0

事实证明,你甚至不需要绘制原图 – user2574059