我有一些代码,我一直试图对它做一些小调整。它曾经使用fgets
从一行加载单个字符,并用它来对3D图中的点进行着色。所以它会读到
a
p
p
n
c
然后使用其他数据文件来指定x,y,z指向哪些数据。结果是非常漂亮的 3D图。
我已经编辑了输入文件,因此它读取
0
1
1
0
2
2
0
我希望它为相同颜色的数字着色。
这是我到目前为止使用代码的地方:
function PlotCluster(mcStep)
clear all
filename = input('Please enter filename: ', 's');
disp('Loading hopping site coordinates ...')
load x.dat
load y.dat
load z.dat
temp = z;
z = x;
x = temp;
n_sites = length(x);
disp('Loading hopping site types ...')
fp = fopen([filename]);
data = load(filename); %# Load the data
% Plot the devices
% ----------------
disp('Plotting the sample surface ...')
figure
disp('Hello world!')
ia = data == 0;
in = data == 1;
ip = data == 2;
disp('Hello Again')
plot3(x(ia),y(ia),z(ia),'b.') %,'MarkerSize',4)
hold on
plot3(x(ic),y(ic),z(ic),'b.') %,'MarkerSize',4)
plot3(x(in),y(in),z(in),'g.') %,'MarkerSize',4)
plot3(x(ip),y(ip),z(ip),'r.') %,'MarkerSize',4)
daspect([1 1 1])
set(gca,'Projection','Perspective')
set(gca,'FontSize',16)
axis tight
xlabel('z (nm)','FontSize',18)
ylabel('y (nm)','FontSize',18)
zlabel('x (nm)','FontSize',18)
%title(['Metropolis Monte Carlo step ' num2str(mcStep)])
view([126.5 23])
我的问题是我收到此错误
Index exceeds matrix dimensions.
Error in PlotCluster (line 34)
plot3(x(ia),y(ia),z(ia),'b.') %,'MarkerSize',4)
我不明白为什么ia会超出x数组的范围。是否与将fgets
更改为load
声明有关?这是让它读取正确数字的唯一方法(不是49s和50s,非常奇怪。)
坚持我的主要部分是这些线(用于对应'a','n','p'等的数字)
ia = data == 0;
in = data == 1;
ip = data == 2;
它们看起来像隐含的if
语句,从data
到ia
等分配,其中ia成为一个数组。但我不确定。
非常感谢任何理解这一点的帮助。
答案 0 :(得分:0)
我已修复此问题,我没有正确更新输入。要解决这个问题的任何人:ia = data == 0表示'使数组与数据大小相同,并用1或0填充它,具体取决于逻辑(数据== 0)是否为真或假'