根据给定参数着色特定点

时间:2013-09-23 10:11:59

标签: matlab

enter image description here enter image description here我是matlab编码的新手,我知道这很简单,这就是为什么我试图绘制从文件中读取的2D数据的原因,但是我被卡住了,用我的下面的代码我我正在读取xy坐标,并尝试根据给定的标准绘制具体索引的特定点(在我的情况下是p,我不会过多介绍细节),我想知道的是如何修改代码所以我可以给出我想要着色的点的正确索引(即当满足条件时用蓝色或水来绘制这个特定点),这是我的代码:

 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

如果有人可以提供帮助,我会感激不尽

3 个答案:

答案 0 :(得分:1)

使用scatter和以下属性:

'MarkerEdgeColor' - 标记边缘颜色 [0 0 1](蓝色)(默认)| 'auto'| '没有'|三元素RGB矢量|串

'MarkerFaceColor' - 标记面部颜色 '无'(默认)| 'auto'|三元素RGB矢量|串

答案 1 :(得分:1)

你的代码有点难以阅读,所以我会一般地说明这个问题。 如果您想要用不同颜色绘制坐标组,例如X1,Y1和X2,Y2,您可以执行以下操作

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

这将使第一组以红色为点,第二组为蓝色和点。 保持,按住可以在单个轴上绘制多个绘图而不清除前一个绘图。

正如评论中所建议的那样 - 你应该尽量避免在matlab中循环。

答案 2 :(得分:0)

我无法清楚地理解你的问题。你的意思是这样的吗?例如,如果我有两个地块

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

figure
plot(x,y1,x,y2)

你想要不同的颜色说红色为10,蓝色为20,绿色为30度两条曲线?这是你想要的吗 ?请正确说明。