【发布时间】:2012-01-14 01:25:26
【问题描述】:
我有一些代码,我一直在尝试对其进行一些小的调整。它曾经使用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 语句有关?这是让它读取正确数字的唯一方法(不是 49 和 50,这很奇怪。)
让我印象深刻的主要是这些行(其中数字对应于'a'、'n'、'p'等)
ia = data == 0;
in = data == 1;
ip = data == 2;
它们看起来像是隐含的 if 语句,从 data 到 ia 等赋值,其中 ia 变成了一个数组。但我不确定。
任何理解这一点的帮助将不胜感激。
【问题讨论】:
-
我已经解决了这个问题,我没有正确更新我的输入。要为遇到此问题的任何人澄清这一点:
ia = data ==0表示“使数组与数据大小相同,并根据逻辑(数据 == 0)是真还是假而用 1 或 0 填充它” -
如果它解决了您的问题,请将其作为答案发布。
-
很抱歉还是新的。会这样做!刚刚被告知声望低于 100 的用户在提问后 8 小时内无法回答自己的问题。您可以在 3 小时内自行回答。在此之前,请使用 cmets,或改为编辑您的问题。
标签: arrays matlab if-statement variable-assignment