我的目标是在同一个图上绘制2个不同的主要函数,但也能够在与原始2个函数如何演变相关的那些类似函数之上进行绘图。例如,第一个函数将是红色和实色,其后续的相似函数将是相同的颜色,但循环通过不同的线条样式,类似于第二个函数,它们都将是蓝色但也将循环通过线条样式。以下是一些示例代码:
lstyle = {" '-' ", " '--' ", " ':' ", " '-.' "};
i=1;
%Plot:
for n=1:3
choose_lstyle = lstyle{i};
y1 = (z.*n).^2;
y2 = (z.*n).^3;
plot(z,y1,'r','linestyle',choose_lstyle);
plot(z,y2,'b','linestyle',choose_lstyle);
n++;
if i < length(lstyle) %cycle through line styles
i = i+1;
else
i = 1;
end
hold on;
end
我正试图安排&#39; - &#39;或者&#39;:&#39;引号和我的choose_lstyle所在的地方。基本上它就像你只有一种线条样式的引号一样,除了我试图循环线条样式。
运行时遇到的错误是:
error: set: invalid value for radio property "linestyle" (value = '-' )
error: called from
__line__ at line 120 column 16
line at line 56 column 8
__plt__>__plt2vv__ at line 500 column 10
__plt__>__plt2__ at line 246 column 14
__plt__ at line 113 column 17
plot at line 220 column 10
PROGRAM_NAME at line 37 column 3
enter code here
答案 0 :(得分:1)
你有几个错误,这是一个有效的代码:
lstyle = {'-','--',':','-.'};
z = 1:100;
%Plot:
k = 1;
for n = 1:10
y1 = (z.*n).^2;
y2 = (z.*n).^2.1; % I changed it from 3 so you can see the red lines
plot(z,y1,'r',z,y2,'b','linestyle',lstyle{k});
if k < length(lstyle) %cycle through line styles
k = k+1;
else
k = 1;
end
hold on;
end
随意在评论中询问任何不清楚的部分。
此代码将为您提供类似的结果,但它更紧凑,更高效:
lstyle = {'-','--',':','-.'};
z = 1:10;
by = bsxfun(@times,z.',1:10).^2;
ry = bsxfun(@times,z.',1:10).^2.1;
p = plot(z,ry,'r',z,by,'b');
k = 1;
for n = 1:numel(p)
p(n).LineStyle = lstyle{k};
k = k+1;
if k > numel(lstyle)
k = 1;
end
end
如果你的MATLAB版本比2014年更早,或者你只是寻找一个紧凑的代码,你也可以写:
lstyle = {'-','--',':','-.'};
z = 1:10;
by = bsxfun(@times,z.',1:10).^2;
br = bsxfun(@times,z.',1:10).^2.1;
p = plot(z,br,'r',z,by,'b');
lineStyles = repmat(lstyle,1,ceil(numel(p)/numel(lstyle)));
set(p,{'LineStyle'},lineStyles(1:numel(p)).');