散点图颜色阈值

时间:2016-01-21 05:11:00

标签: matlab plot scatter data-science

我正在尝试编写一个脚本来绘制来自某些显微镜数据的荧光强度作为散点图,并根据在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 个答案:

答案 0 :(得分: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

但是,您实际上可以在MATLAB中完全取消for - 循环,并使用逻辑索引以矢量化方法构造c

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

这是在MATLAB中执行此操作的更惯用的方式。

相关问题