У меня есть какой-то код, и я пытаюсь внести в него небольшие изменения.Раньше он использовал fgets
для загрузки одного символа из линии и использовал его для раскраски точек на трехмерном графике.Таким образом, он будет читать
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 становится массивом.Но я не уверен.
Любая помощь в понимании этого будет принята с благодарностью.