我正在尝试编写一个脚本来绘制来自某些显微镜数据的荧光强度作为散点图,并根据在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
答案 0 :(得分:1)
据the documentation我所知,输入参数c
(假设为scatter(x,y,a,c,...)
)可以是以下之一:
'g'
或 'r'
。但是只有一个标记着色你所有人。[1,0,0]
表示红色,[0,1,0]
表示绿色。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中执行此操作的更惯用的方式。