问题描述
有没有办法以编程方式获取可用于在 Octave 中绘图的标记和线型列表?
理想情况下,我会做类似的事情
mslist = whatever_function_for_marker_styles;
lslist = whatever_function_for_line_styles;
for i = 1:np
plot(x,y(i,:),'marker',mslist(i),'linestyle',lslist(i))
endfor
注意事项:
解决方法
最简单的方法是从手册中获取符号并将它们放入元胞数组中:
mslist = {'+','o','*','.','x','s','d','^','v','>','<','p','h'};
lslist = {'-','--',':','-.'};
您可以使用标准的 for 循环遍历它们,并使用大括号通过索引访问它们,例如lslist{i}。符号在手册 (https://octave.org/doc/v6.1.0/Two_002dDimensional-Plots.html#Two_002dDimensional-Plots) 的第 15.2.1 节中。普通向量适用于 mslist 而不是元胞数组,因为所有符号都是单个字符,但不适用于 lslist,其中一些字符长为两个字符。
,我同意 Howard 的观点,即“完全”以编程方式执行此操作可能有点矫枉过正。
但是,如果您确实想要这样做,我敢打赌会解析“plot”命令的“help”输出,该命令保证提及这些要点,并且具有合理的保证即使将来添加更多标记等,它也将保持相同的格式。
我不会解析整个事情,但如果你这样做,你可能会这样开始:
plotdoc = help('plot');
[plotdoc_head,plotdoc_rest] = deal( strsplit( plotdoc,' linestyle' ){:} );
[plotdoc_lines,plotdoc_rest] = deal( strsplit( plotdoc_rest,' marker' ){:} );
[plotdoc_markers,' color' ){:} );
[plotdoc_colors,'";displayname;"' ){:} );
或类似的东西,然后创造性地使用正则表达式或 strfind / strtoken / strplit 来获取每个类别中必要的标记。