matlab绘图中被隐藏的Marker, 99.99%的小伙伴都不知道

2023-03-17 13:04:43 浏览数 (1)

当你看见这个标题时是不是觉得是噱头呢?不管是不是第一次见到今天推文所讲内容,都值得一看。

相信大家对plot函数并不陌生,在绘制多条数据曲线时,除了用不同颜色区分外,往往会在相应的数据点处同时加上不同的marker。通过查询plot对应的帮助文档,不难发现,matlab提供了13种可选marker,相对来说算是少的了,而且marker是plot的私有属性,不能自定义修改。如果你要是相信plot只有这13种marker可以使用,那你就被plot的帮助文档给忽悠了。其实,在matlab顶级图像句柄的隐藏属性中,可以自定义并启用一些内部对象的额外功能。

正因为此,才使得启用隐藏marker成为可能。plot函数所属的line句柄有一个名叫MarkerHandle的隐藏属性,该属性具有极其强大丰富的功能,这里就不展开了,只用尝试与marker相关的属性设置。

在命令窗口中执行set(hLine, 'Marker')hLineplot对应的句柄,可以获得如下14种结果,前13种为plot帮助文档中给出的可用marker:

代码语言:javascript复制
{' '} {'o'} {'*'} {'.'} {'x'} {'square'} {'diamond'} {'v'} {'^'} {'>'} {'<'} {'pentagram'} {'hexagram'} {'none'}

在命令窗口中执行set(hLine.MarkerHandle, 'Style')hLineplot对应的句柄,可以获得如下16种结果,前15种为plot帮助文档中给出的可用marker,对比上面的结果可以看出,多出了'hbar''vbar'两种类型,这就是被隐藏了的marker。

代码语言:javascript复制
{'plus'} {'circle'} {'asterisk'} {'point'} {'x'} {'square'} {'diamond'} {'downtriangle'} {'triangle'} {'righttriangle'} {'lefttriangle'} {'pentagram'} {'hexagram'} {'vbar'} {'hbar'} {'none'}

如果使用'hbar''vbar'呢?请看下方的示例:

代码语言:javascript复制
clc;clear;close all;
figure('color','w');
x = 0:pi/30:2*pi;
y = cos(x).*sin(exp(x));
% 获取plot的句柄
hLine = plot(x,y,'o-','LineWidth',1.5);
drawnow;
% 设置marker颜色
hLine.MarkerEdgeColor = 'r';
% set(hLine, 'Marker')% top-level marker styles
% set(hLine.MarkerHandle, 'Style') % low-level marker styles
pause(0.005);
% 设置隐藏marker类型,'hbar'或'vbar'
hLine.MarkerHandle.Style = 'hbar';
% 设置bar的长度
hLine.MarkerHandle.Size = 8;
% 设置bar的宽度
hLine.MarkerHandle.LineWidth = 3;
title('横条(vbar) marker演示图');

效果图

怎么样?效果还不赖吧!关于MarkerHandle属性更多功能应用,且听下回分解。

参考资料:

[1] http://undocumentedmatlab.com/articles/undocumented-plot-marker-types

[2] https://www.mathworks.com/help/matlab/ref/plot.html

封面图片:由 stux 在Pixabay上发布

如需转载,请在公众号中回复“转载”获取授权,未经授权擅自搬运抄袭的,必将追究其责任!

0 人点赞