MATLAB - 迭代过程中的标记曲线

时间:2011-12-05 04:15:45

标签: matlab plot

我想显示用于生成每条曲线旁边的每条曲线的p值。请注意,由于存在E和-E的图,因此p值应该相同。我已经尝试了一段时间了,我没有遇到任何超级有用的东西。

t = -3.1;%coupling
a = 1;%distance between r1 and r3
n = 5;%latice vector span in a1 direction
m = 1;%latice vector span in a2 direction
i = -7;%unique axial vector t_hat direction
j = 11;%unique axial vector c_hat direction

max_p = abs((n*(i+j/2)-j*(m+n/2)));%# of unique p values
La = sqrt(3)*sqrt(m^2+n*m+n^2)*a/gcd(2*n+m,2*m+n);%unit cell length
C = sqrt(n^2+n*m+m^2);%circumference of the nanotube

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));

    title_ = sprintf('(%d,%d) Carbon Nanotube Dispersion Diagram',n,m);
    title(title_);
    xlabel('k_{t}a');
    ylabel('Energy (eV)');
    plot(kt,E);
    plot(kt,-E);
end

2 个答案:

答案 0 :(得分:2)

有一个名为text的命令可以将注释写入图中,

http://www.mathworks.se/help/techdoc/ref/text.html

如果你不能解决它和字符串操作我误解了问题

答案 1 :(得分:1)

首先,您是否需要同时绘制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)

我确信有一种更优雅的构建图例文本的方法,但上面的代码可以正常工作。另请注意,我已将调用移至xlabelylabeltitle以外的循环。这样它们只被调用一次而不是循环的每次迭代。

最后,您需要注意确保循环的每次迭代都使用不同的线条颜色或线条样式(请参阅下面的编辑)。对于给定的循环迭代,您可以为每对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));

最后,最好在Matlab脚本的顶部加入clear all

编辑:要让每个绘制的线条为循环的每次迭代使用不同的颜色,请使用以下内容

... 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