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