我想使用MATLAB绘制多条线,并使每条线的标记不同。我知道使用ColorSet = hsv(12);
可以实现不同颜色的效果。是否有类似于这种方法的标记方式?
好的,我不知道MATLAB内置了这样的功能,但是我会按照以下步骤进行操作。我创建自己的单元格:
markers = {'+','o','*','.','x','s','d','^','v','>','<','p','h'}
markers{mod(i,numel(markers))+1}
我还创建了一个函数getMarker
来实现这个功能,并将其添加到MATLAB的路径中,以便在所有脚本中都可以访问它。
x = linspace(0, 2*pi);
y = cos(bsxfun(@plus, x(1:15:end), x'));
figure
m = {'+','o','*','.','x','s','d','^','v','>','<','p','h'};
set(gca(), 'LineStyleOrder',m, 'ColorOrder',[0 0 0], 'NextPlot','replacechildren')
plot(x, y)
是的,有一个现成的方法:它是LineStyleOrder轴属性。要激活它,您必须禁用ColorOrder属性,后者优先于前者并默认激活。您可以按照以下方式操作:
m = {'+','o','*','.','x','s','d','^','v','>','<','p','h'};
set_marker_order = @() set(gca(), ...
'LineStyleOrder',m, 'ColorOrder',[0 0 0], ...
'NextPlot','replacechildren');
其中m
值是从help plot
的输出中手动获取的。然后,按照以下示例使用它:
x = linspace(0, 2*pi);
y = cos(bsxfun(@plus, x(1:15:end), x'));
figure
set_marker_order()
plot(x, y)
x=0:0.1:10;
y1=sin(x);
y2=cos(x);
m = ['h','o','*','.','x','s','d','^','v','>','<','p','h'];
plot(x,y1,[m(1)])
hold on;
plot(x,y2,[m(2)])
我正在使用一种简单的过程来随机创建绘图样式。虽然它并不是真正的迭代,但某些人可能会发现它有用:
function [styleString] = GetRandomLineStyleForPlot()
% This function creates the random style for your plot
% Colors iterate over all colors except for white one
markers = {'+','o','*','.','x','s','d','^','v','>','<','p','h'};
lineStyles = {'-', '--', ':', '-.'};
colors = {'y', 'm', 'c', 'r', 'g', 'b', 'k'};
styleString = strcat(markers(randi(length(markers), 1) ), ...
lineStyles(randi(length(lineStyles), 1) ), ...
colors(randi(length(colors), 1) ) );
end
最简单的方法是,在使用plot
时,在命令中添加线条类型。
一些可能的选项包括:--
,:
,-
,-.
还有标记类型和线宽的选项。
例如,以下代码将生成带有不同标记类型的多条线:
x = -pi:.1:pi;
y = sin(x);
z = cos(x);
t = tan(x);
l = x.^2;
figure();
hold on;
plot (x,y,'--g');
plot (x,z,'-.y');
plot (x,t,'-b');
plot (x,l,':r');
hold off;
如需更多帮助,请访问:http://www.mathworks.com/help/techdoc/ref/linespec.html
set(h,'Marker',markers(j));
并记住索引j小于markers表的大小。但是是否有任何现成的方法来完成这个任务呢? - GC87