2013-09-23 18 views
1

enter image description hereenter image description here我是新來的matlab編碼,我知道這很簡單,這就是爲什麼我試圖從文件中讀取二維數據,但我卡住了,我的代碼如下在閱讀xy座標並試圖根據給定的標準繪製具體索引的特定點(在我的情況下,我不會過多考慮細節),但我想知道的是我該如何修改代碼我可以給出正確的索引,我想一種顏色的點(即當條件滿足的情節藍色或watever這個特定點),這裏是我的代碼:根據給定參數着色特定點

M=load('data1.XYZ'); 
x=M(:,1); %all x coordinates 
    y=M(:,2); %all y coordinates 
    xA=M(1:400,1); % x of particles A 
    yA=M(1:400,2); % y of particles A 
    xB=M(401:800,1); % x of particles B 
    yB=M(401:800,2); % y of particles B 
    Pos1=[x y]; % read in the x y coordinates 
    [num1,junk1] = size(Pos1); 
    PosA=[xA yA]; % read in the x y A coordinates 
    PosB=[xB yB]; % read in the x y B coordinates 
    [numA,junkA] = size(PosA); 
    [numB,junkB] = size(PosB); %no of all B particles 
    fprintf('Determining Distances between particles...\n'); 
    r = zeros(numA,1); 
    psil_avg=0.0+0.0i; 
    psir_avg=0.0+0.0i; 
    for m=1:numA 
    for n=1:numA 
    cnt_l=0; 
    psi_l=0.0+0.0i; 
    if(m~=n) 
    r(m,n)=norm(PosA(m,:)-PosA(n,:)); 
    if(r(m,n)< 1.44) 
    v1=PosA(m,:)-PosA(n,:); 
    u=[0 1]; 
    dot=v1(:,1).*u(:,1)+v1(:,2).*u(:,2); 
    N=norm(v1); 
    cosinus=dot/N; 
    theta=acos(cosinus); 
    cnt_l=cnt_l+1; 
    psi_l=psi_l+(cos(theta)+6.0i*sin(theta)); 
    psil_avg=psi_l/cnt_l; 
    for k=1:numA 
    cnt_r=0; 
    psi_r=0.0+0.0i; 
    if(m~k) 
    r(m,k)=norm(PosA(m,:)-PosA(k,:)); 
    if(r(m,k)< 1.44) 
    v2=PosA(m,:)-PosA(k,:); 
    u2=[0 1]; 
    dot2=v2(:,1).*u2(:,1)+v2(:,2).*u2(:,2); 
    N2=norm(v2); 
    cosinus2=dot2/N2; 
    theta2=acos(cosinus); 
    cnt_r=cnt_r+1; 
    psi_r=psi_r+(cos(theta2)+6.0i*sin(theta2)); 
    psir_avg=psi_r/cnt_r; 
    p=sqrt(psi_r*psi_l); 
    if p > 0.94 
    % fprintf('bond order parameter is %f\n',p); 
    plot(xA(n),yA(n),'ro','Markersize',6); 
    hold on; 
    else 


    plot(xA(n),yA(n),'go','Markersize',8); 
end 
end 
end 
end 
end 
end 
end 
end 

如果有人能幫助我d感謝

+1

請檢查您的代碼:正確縮進,糾正錯別字(例如'[PosA = [xA yA];',刪除無用的'end' –

+0

太多循環,考慮矢量化 –

+0

我完全不清楚你是什麼請問只發布你遇到的具體代碼部分,並指出什麼是不工作以及期望的結果是什麼,並且Hugues是對的 – chryss

回答

1

使用scatter和以下性質:

'MarkerEdgeColor' - 標記邊緣顏色 [0 0 1](藍色)(默認值)| 'auto'| 'none'|三元素RGB矢量|字符串

'MarkerFaceColor' - 標記臉顏色 'none'(默認)| 'auto'|三元素RGB矢量|字符串

1

你的代碼有點難以閱讀,所以我會在一般情況下解決這個問題。 如果你有座標的羣體,你想用不同的顏色來繪製說X1,Y1和X2,Y2,你可以做以下

figure 
plot(X1,Y1,'r*') 
hold on 
plot(X2,Y2,'b*') 
hold off 

這將顏色爲紅色第一組點和第二位藍色和一個點。 保持,暫停是在單一軸上繪製多於一個繪圖而不需要清除前一個繪圖。

正如評論建議 - 你應該儘量避免在MATLAB中循環。

+0

謝謝,我知道這是我們如何繪製2D數據,但是我即使在繪製所有的點時,我想要在某個區域對點集進行顏色設置,如果它們滿足條件 –

+0

好吧,從圖像中可以更清楚一些,您可以定義一個回答標準的集合,像X2 = X(find(X <5&X> 2))等,並按照上面的建議單獨繪製。 – PolinaK

0

我無法清楚地理解你的問題。你是這個意思嗎?例如,如果我有兩個地塊

x = linspace(-2*pi,2*pi); 
y1 = sin(x); 
y2 = cos(x); 

figure 
plot(x,y1,x,y2) 

你想不同的顏色表示紅10,藍20,綠色爲兩條曲線30度?這是你想要的嗎 ?請正確指定。

+0

我已經是abl e通過簡單的繪圖命令來繪製這兩組大小的粒子,我想要的是在這些點集內對符合特殊規則的特定點進行着色(例如,如果我查看周圍的一個點並且我發現它屬於一個三角形的形狀,我想它在紅色,否則保持它,因爲它),我能夠在matlab中做到這一點? –

+0

仍然沒有得到它。請在油漆中繪製圖片併發布以更好地表達您的意思 – roni

+0

我已經添加了上面的圖片,我可以找到一種方法來爲這些特定點着色? –