Matlab如何填充箭头?

8

我正在制作一个箭头图

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

我希望箭头头部被填充(即enter image description here而不是enter image description here)。从文档中可以看出,只需要使用以下代码即可:
quiver(...,LineSpec,'filled')

然而,我仍然无法找出正确的语法 - 这些不起作用:
quiver(x,y,u,v,'LineWidth','filled');
quiver(x,y,u,v,'LineWidth',1,'filled');

感谢您的帮助!


编辑:使用行指定符会产生以下效果:

quiver(x,y,u,v) %Original

enter image description here

quiver(x,y,u,v,'-sk','filled') %With line specifiers

enter image description here


2
LineSpec 通常是一个字符串,例如 '-k' 表示黑色线条,而 'filled' 则指定了可以使用的点标记。例如 '-sk' 可以得到正方形,但这将替换 quiver 中的箭头。如果要修改 quivers,建议您查看 此前的问题 - RTL
@RTL:感谢你提供的有关另一个问题的参考,确实很有帮助,但我认为(如文档建议的那样),应该有一种更简单的方法来做到这一点。关于 LineSpec,这是一个好的方向,但是这些说明符通常并不包括所有常规规格,特别是:“quiver(x,y,u,v,'Linestyle','-sk')”似乎不是有效的语法。 - Ohad Dan
尝试使用 quiver(x,y,u,v,'-sk'),不需要 'linestyle'。恐怕我不知道更简单的方法...(值得将其与 quiver(x,y,u,v,'-sk','filled') 进行比较,以查看填充效果) - RTL
你所要求的并不容易实现,因为Matlab在绘制quiver图中的每个箭头时都使用了两个线对象:一个用于尾部,一个用于箭头。因此,箭头的样式不能像annotation('arrow',...)那样更改。一种可能的方法是使用fill(...)将每个箭头线对象替换为多边形。 - Deve
2个回答

3

我不是一个MATLAB专业人士,如果我的回答很笨拙请原谅。我相信有更优雅的解决方法 - 以下是我找到的方法。

我决定通过检索箭头尖端的位置、删除它们并用fill重新绘制它们来解决这个问题(就像Deve建议的那样)。我注意到可以通过插入NaN值来告诉fill一个多边形的结束和下一个的开始(这也是原始箭头尖端被绘制的方式,正如您可以通过检查原始的XData看到的那样)。这样做会丢失影响对象颜色的可能性,并且它们没有被填充。作为一种解决方法,我在循环中绘制了新的箭头尖端 - 我知道可能有更好的方法,所以我很高兴得到任何补充。

我使用了您所提供的示例,只需将最后一行替换为HANDLE = quiver(x,y,u,v);以获取绘图的句柄。从那里开始:

children=get(handle,'children'); % retrieve the plot-children - 
                                 % second element are the arrow tips

XData=get(children(2),'XData'); % retrieve the coordinates of the tips
YData=get(children(2),'YData');

hold on
delete(children(2))  % delete old arrow tips

for l=1:4:length(XData)-3   % paint new arrow tips, skipping the NaN-values
    ArrowTips((l-1)/4+1)=fill(XData(l:l+2),YData(l:l+2),'r');
end

然后你可以在ArrowTips变量中找到箭头标记的句柄。在调用fill时,请随意指定Edge和Facecolor,这里分别为黑色和红色。


抱歉,弄错了不同的方法。我更新了代码,现在应该可以工作了。谢谢你的纠正! - Paul Paulsen

0

2
请简要描述该问题页面的内容以及它如何解决这个问题。 - CPHPython

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接