获取 Octave 中的绘图标记和线型列表

问题描述

有没有办法以编程方式获取可用于在 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

注意事项:

  1. 我会添加一些 mod 函数以在列表中循环。
  2. 我知道这两个列表的大小可能不一样,因此它们可能会在循环时相互转换。

解决方法

最简单的方法是从手册中获取符号并将它们放入元胞数组中:

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 来获取每个类别中必要的标记。