不带箭杆的箭袋图

时间:2019-06-18 05:49:13

标签: matlab plot customization visualization matlab-figure

我正在MATLAB中模拟粒子的运动。我正在使用quiver来获取他们运动的方向。但是,我只希望箭头没有茎。我无法实现这一目标。

我尝试使用以下内容,

quiver(x,y,vx,vy,'LineStyle','none','ShowArrowHead','on')

摆脱茎,但箭头也没有显示。有办法解决吗?

2 个答案:

答案 0 :(得分:2)

'LineStyle','none'无效,因为样式既适用于茎,也适用于头部,因此将其设置为none会同时隐藏两者。

这可以通过挖掘Quiver对象的一些未记录的属性来解决。探索Quiver对象的属性(使用struct(<handle to quiver plot>)),我们可以看到颤动图具有NodeChildren属性,并且它由4个元素组成,

>> hq = quiver(x,y,u,v);
>> hq.NodeChildren
ans = 
  4×1 graphics array:

  ListOfPointsHighlight
  LineStrip
  LineStrip
  Marker

您在上方看到的LineStrip对象从上到下对应于尾巴和头部。在这里,只需通过其Visible属性隐藏尾巴即可。

[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;

figure();
hq = quiver(x,y,u,v);

pause(0.1); % this appears to help
hq.NodeChildren(2).Visible = 'off';

结果:

enter image description here

在R2019a上测试。

答案 1 :(得分:0)

在这种情况下,颤振器将绘制箭头偏离数据点的位置,这些位置通常会出现在箭头柄的末端。 使用MATLAB的quiver()命令很难控制杆长到杆头的大小,绘制闭合的箭头或修改箭形箭头的形状和位置。

另一种选择是文件交换arrow3()函数,可在此处使用:

https://www.mathworks.com/matlabcentral/fileexchange/14056-arrow3

arrow3()函数在此处有许多示例:

https://kr.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/14056/versions/16/previews/arrow3_examples.html

使用quiver()函数的代码代替arrow3()的示例

[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;

figure();
%hq = quiver(x,y,u,v);
p1 = [x(:) y(:)]; % data start point
u = u(:); v=v(:);
arrow3(p1,p1+0.01*[u,v],'k',1,2); % create small (0.01) arrow stems