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
4

1 回答 1

1

据我从文档中可以看出,输入参数c(假设scatter(x,y,a,c,...))可以是以下之一:

  • 指定颜色的单个字符,例如'g' 'r'。但只有一个标量着色所有的点。
  • 一个单一的 RGB 三重着色你的所有点,所以[1,0,0]红色或[0,1,0]绿色。
  • RGB 三元组的三列矩阵。这可能是您想要的。我将向您展示这一点。
  • 一列数字矩阵,将根据 a 为点着色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在 MATLAB 中完全取消 -loop,并c使用逻辑索引以矢量化方法构造:

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

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

于 2016-01-21T07:25:13.073 回答