MATLAB用户的快速“便利”问题。我循环绘制一个绘图命令,每次都将不同的数据传递给它。数据碰巧是从函数调用生成的,函数调用在每次迭代时传递不同的参数值。要在同一轴上绘制所有内容,我使用“保持”功能。遗憾的是,这不会自动循环显示可用的ColorOrder和/或LineStyleOrder绘图参数,因此每个迭代时绘制的每条线都具有相同的样式。
for i=1:nLines
[x_data y_data]=get_xy_data(param1(i),param2(i))
plot(x_data,y_data)
end
每条线都是默认的蓝线样式。 显而易见的解决方案是预先生成各种线条样式的单元格数组,颜色如下:
line_styles={'-','--','-*'}; %...etc
colors=colormap(jet(nLines));
然后在每次迭代时访问每个。我想要的是访问将从ColorOrder生成的默认颜色,以及来自LineStyleOrder的默认行循环。如果我尝试这样的话:
get(gca,'LineStyleOrder')
这只返回在该轴中使用的样式(我只在使用其中一种样式定义的轴上测试了它,但是点是,它不会给我所有可能的线条样式)。帮助表示感谢,谢谢!
编辑:让我更具体地了解我正在寻找的东西。figure; hold on;
for i=1:nLines
[xdata, ydata]=get_data(p1(i),p2(i)) % call some function to return x,y data
plot(xdata,ydata) % on i=1, default blue line
% function which tells matlab to get/set the next linestyle, color combination
nextStyle()
end
如果不存在,写它就不会太难,但我想在重新发明轮子之前先问一下。
答案 0 :(得分:1)
您可以使用hold all
。这会自动为每个情节设置不同的颜色和线条样式。
答案 1 :(得分:1)
您可以直接为每一行设置线条样式和颜色。这是一个例子:
figure
hold on
nLines = 12;
line_styles={'-','--','-.'};
colors= hsv(nLines);
indexColors = 1;
indexLines = 1;
for i=1:nLines
xData = 1:10;
yData = rand(1,10);
h = plot(xData,yData);
ls = line_styles{indexLines};
c = colors(indexColors,:);
set(h,'color',c)
set(h,'LineStyle',ls)
if indexColors < length(colors)
indexColors = indexColors + 1;
else
indexColors = 1;
end
if indexLines < length(line_styles)
indexLines = indexLines + 1;
else
indexLines = 1;
end
end
答案 2 :(得分:1)
您可能有兴趣设置DefaultAxesLineStyleOrder
和DefaultAxesColorOrder
的默认属性。
图(样式和颜色)将首先循环新定义的颜色,然后更改线条样式。在连续的绘图循环中,使用hold all
将“保持图形和当前线条颜色和线条样式,以便后续绘图命令不会重置ColorOrder和LineStyleOrder”(请参阅matlab doc)。两个例子都产生相同的结果。
%default properties (line style and color)
set(0,'DefaultAxesLineStyleOrder',{'--','-',':'})
set(0,'DefaultAxesColorOrder', summer(4))
figure('Color','w');
%example plot 1 (concurrent plots)
subplot(1,2,1);
yvals = [1:50;1:50]
plot(yvals, 'LineWidth', 2)
axis([1 2 0 size(yvals,2)+1 ]);
title('concurrent plot','FontSize',16);
%example plot 2 (iterative plots)
subplot(1,2,2);
for ii = 1:50
plot(yvals(:,ii), 'LineWidth', 2);
hold all;
end
axis([1 2 0 size(yvals,2)+1 ]);
title('successive plot','FontSize',16);
结果
看起来@Luis Mendo没那么错!