Во-первых, вам нужно построить как E
, так и -E
? Так как они одинаковы, за исключением их знака, вы на самом деле не добавляете никакой информации в график, имея там также -E
. Однако, если вам нужны обе строки, просто создайте массив строк для легенды, во время цикла, в котором каждая строка включена дважды (один раз для E
и один раз для -E
).
... Initial calculations ...
hold on;
for p=0:1:max_p
kt = -pi/La:.05:pi/La;
kc = 2*pi*p/C;
ka1 = kc*a*.5*(2*n+m)/C + kt*a*sqrt(3)*.5*m/C;
ka2 = kc*a*.5*(n+2*m)/C - kt*a*sqrt(3)*.5*n/C;
E = abs(t+t*exp(1i*ka2)+t*exp(1i*ka1));
plot(kt,E);
plot(kt,-E);
% Construct array containing legend text
legend_text{2*(p+1)-1} = strcat('p=', num2str(p));
legend_text{2*(p+1)} = strcat('p=', num2str(p));
end
title_ = sprintf('(%d,%d) Carbon Nanotube Dispersion Diagram',n,m);
title(title_);
xlabel('k_{t}a');
ylabel('Energy (eV)');
legend(legend_text)
Я уверен, что есть более элегантный способ создания текста легенды, но приведенный выше код работает. Также обратите внимание, что я переместил вызовы на xlabel
, ylabel
и title
за пределы цикла. Таким образом, они вызываются только один раз, а не для каждой итерации цикла.
Наконец, вы должны позаботиться о том, чтобы каждая итерация цикла отображала свой цвет линии или стиль линии (см. Правку ниже). Вы можете покрасить / стилизовать каждую пару строк E
и -E
одинаково для данной итерации цикла и просто отобразить легенду для E
(или -E
), что, очевидно, уменьшит вдвое количество записей легенды. , Для этого вам нужно будет скрыть видимость дескриптора линии - это не позволит ему получить элемент в легенде. Для этого используйте в своем цикле следующее:
plot(kt, E);
plot(kt,-E, 'HandleVisibility', 'off');
% Construct array containing legend text
legend_text{p+1} = strcat('p=', num2str(p));
Наконец, лучше всего включить clear all
в начало ваших скриптов Matlab.
Редактировать: Чтобы каждая построенная линия использовала разные цвета для каждой итерации цикла, используйте что-то вроде следующего
... initial calculations ...
cmap = hsv(max_p); % Create a max_p-by-3 set of colors from the HSV colormap
hold on;
for p = 0:1:max_p
plot(kt, E, 'Color', cmap(p,:)); % Plot each pair of lines with a different color
plot(kt, -E, 'Color', cmap(p,:));
end