散点图颜色阈值



我正在尝试编写一个脚本,以将某些显微镜数据的荧光强度绘制为散点图,并根据响应大于一定量的细胞对这些数据进行阈值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

我从文档中可以看出,输入参数 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 中执行此操作的一种更惯用的方法。