我想通过一次调用plot()
来绘制多行,每行都有不同的线型。这是一个例子:
两个
plot([1,2,3]', [4,5;6,7;8,9], {'-o', '-x'})
和
hs = plot([1,2,3]', [4,5;6,7;8,9])
set(hs, 'LineStyle', {'--'; '-'})
不行。我已经尝试了一大堆带方形和花括号的奥术组合,但似乎没有什么可以做到的。
我知道可以遍历Y中的列并为每个列调用plot()
(如this question中所示),但这不是我所追求的。如果可能的话,我真的想避免在这里使用循环。
感谢。
PS:我发现这个'prettyPlot'脚本说它可以做这样的事情,但我想知道是否有任何内置的方法。
PPS:对于想要快速解决此问题的人,请尝试以下方法:
for i = 1:length(hs)
set(hs(i), 'Marker', markers{i});
set(hs(i), 'LineStyle', linestyles{i});
end
e.g。与markers = {'+','o','*','.','x','s','d','^','v','>','<','p','h'}
答案 0 :(得分:1)
参考http://www.mathworks.com/help/matlab/ref/plot.html,这是如何使用单个绘图命令绘制多行:
plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn)
所以你的想法
plot([1,2,3]', [4,5;6,7;8,9], {'-o', '-x'})
必须写成:
plot([1,2,3]', [4,6,8], '-o', [1,2,3]',[5,7,9],'-x')
结果:
将输入参数重新组织到单元格数组中,并使用cellfun将plot命令应用于每个单元格元素。
x = [1,2,3]';
xdata = {x;x};
ydata = {[4,6,8];[5,7,9]};
lspec = {'-o';'-x'};
hold all;
cellfun(@plot,xdata,ydata,lspec);