是否有一种方法以编程方式获取用于在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
备注:
mod
函数来循环列表。我知道两个列表的大小可能不一样,所以它们在循环时可能会互相转移。--发布于 2021-02-02 09:14:10
最简单的方法是从手册中获取符号,并将它们放在单元格数组中:
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,其中一些是两个字符长的。
发布于 2021-02-02 14:24:42
我同意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, plotdoc_rest] = deal( strsplit( plotdoc_rest, ' color' ){:} );
[plotdoc_colors , plotdoc_rest] = deal( strsplit( plotdoc_rest, '";displayname;"' ){:} );
或类似的内容,然后创造性地使用regexp或strfind / strtoken / strplit来获取每个类别中的必要标记。
https://stackoverflow.com/questions/66013050
复制相似问题