如何用不同标记绘制多条线?

9

我想使用MATLAB绘制多条线,并使每条线的标记不同。我知道使用ColorSet = hsv(12);可以实现不同颜色的效果。是否有类似于这种方法的标记方式?

6个回答

10

好的,我不知道MATLAB内置了这样的功能,但是我会按照以下步骤进行操作。我创建自己的单元格:

markers = {'+','o','*','.','x','s','d','^','v','>','<','p','h'}

然后通过以下方式访问它:
markers{mod(i,numel(markers))+1}

我还创建了一个函数getMarker来实现这个功能,并将其添加到MATLAB的路径中,以便在所有脚本中都可以访问它。


这看起来与我的解决方案非常相似。但是感谢您提醒我可以使用函数的可能性。 - GC87
2
有人知道是否可以仅调用一次绘图函数来实现这个吗? - patrik
我在这里提出了一个关于传递线条样式数组的问题:http://stackoverflow.com/questions/40058490/how-do-i-pass-an-array-of-line-specifications-or-styles-to-plot - Aralox

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

谢谢你的回答,它有效。但是,如果我将ColorOrder更改为[1 0 0; 0 1 0; 0 0 1],它就不再起作用了。你知道为什么吗? - Derzu
据我所知,您可以设置LineStyleOrder和ColorOrder中的一个,而不能同时设置两个。 - Felipe G. Nievinski

3

是的,有一个现成的方法:它是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)

谢谢你的回答,它有效。但是,如果我将ColorOrder更改为[1 0 0; 0 1 0; 0 0 1],它就不再起作用了。你知道为什么吗? - Derzu

2
以下内容也会有所帮助。
函数testfig
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)])

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

1

最简单的方法是,在使用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


是的,我正在使用绘图功能,我也熟悉您所描述的方法。但是我希望有一些更通用的方法。我在for循环中生成我的图并将句柄设置到它上面。我已经成功地通过使用可能标记的表来得到了正确的解决方案,然后使用 set(h,'Marker',markers(j)); 并记住索引j小于markers表的大小。但是是否有任何现成的方法来完成这个任务呢? - GC87

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接