2016-01-21 238 views
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 

回答

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 

但是,你實際上可以做掉與for -loop完全MATLAB和在構建c使用邏輯索引的矢量化方法:

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

這是一個更習慣於在MATLAB中執行此操作的方法。