0

在此处输入图像描述在此处输入图像描述我是 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

如果有人可以提供帮助,我将不胜感激

4

3 回答 3

1

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

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

这会将第一组用一个点着色为红色,第二个用蓝色和一个点着色。Hold on, hold off 用于在单个轴上绘制多个图而不清除前一个图。

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

于 2013-09-23T11:18:30.460 回答
1

使用scatter和以下属性:

'MarkerEdgeColor' - 标记边缘颜色 [0 0 1](蓝色)(默认)| '汽车' | '无' | 三元素RGB矢量| 细绳

'MarkerFaceColor' - 标记面颜色“无”(默认)| '汽车' | 三元素RGB矢量| 细绳

于 2013-09-23T10:29:22.237 回答
0

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

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

figure
plot(x,y1,x,y2)

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

于 2013-09-23T11:40:58.757 回答