2016-01-21 183 views
1

我想编写一个脚本来从一些显微镜数据绘制荧光强度的散点图和门槛基于细胞应对超过一定金额CFPMAX更大的这些数据,并以绿色和细胞绘制这些是不要红色。当我尝试绘制这个图像时,我无法真正地将合适的颜色分配给点,并且它们最终变成蓝色和红色。我需要为图像中的每个像元分配4个值(每个荧光通道3个值和一个值以确定它是否响应(绿色或红色)。因此,我想知道是否可以分配正确的颜色该矩阵的第4列,或者如果我要对这个错误的方式都在一起。我重视我下面的代码。散点图颜色阈值

MCHR=csvread('data1.csv'); 
MYFP=csvread('data2.csv'); 
MCFP=csvread('data3.csv'); 

CFPMAX=(max(MCFP))'; 
MCHMAX=(max(MCHR))'; 
YFPMAX=(max(MYFP))'; 

c=zeros(length(CFPMAX)); 

for i=1:length(c) 
    if CFPMAX(i)>40 
     c(i)='g'; %// green responders 
    else 
     c(i)='r'; %// red non-responders 
    end 
end 

MM=horzcat(MCHMAX,YFPMAX,CFPMAX,c); 


scatter(MM(:,1),MM(:,2),100,MM(:,4),'filled','MarkerEdgeColor',[0 0 0]) 
title('Responders vs Non-Responders ') 
xlabel('[TF1]') %// x-axis label 
ylabel('[TF2]') %// y-axis label 

回答

1

据我可以从the documentation告诉,输入参数c(假设scatter(x,y,a,c,...))可以是以下之一:

  • 指定颜色的单个字符,例如'g''r'。但只有一个标量着色你所有的点。
  • 一个单一的RGB三元着色所有的点,这样[1,0,0]红色或[0,1,0]绿色。
  • RGB三元组的三列矩阵。这可能是你想要的。我会向你证明这一点。
  • 这将根据colormap着色点号的一列矩阵。这一个也会为你工作,但不太明确。顺便说一句,我猜想,这是选项MATLAB虽然你的人物的载体是。

所以为了创建RGB矩阵三倍,你可以修改你的代码

c=zeros(length(CFPMAX),3); 
for i = 1:length(CFPMAX) 
    if CFPMAX(i)>40 
     c(i,:)=[0,1,0]; %// green responders 
    else 
     c(i,:)=[1,0,0]; %// red non-responders 
    end 
end 

但是,你实际上可以做掉与for -loop完全MATLAB和在构建c使用逻辑索引的矢量化方法:

c=zeros(length(CFPMAX),3); 
c(CFPMAX > 40, 2) = 1; %// green responders 
c(CFPMAX <= 40, 1) = 1; %// red responders 

这是一个更习惯于在MATLAB中执行此操作的方法。

相关问题