【问题标题】:Matlab how to fill quiver arrow headsMatlab如何填充箭袋箭头
【发布时间】:2014-04-07 11:50:05
【问题描述】:

我正在制作quiver plot

[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)

我希望填充箭头(即 而不是 )

从文档来看,使用

应该很简单
quiver(...,LineSpec,'filled')

但是,我仍然无法找出正确的语法 - 这些不起作用:

quiver(x,y,u,v,'LineWidth','filled');
quiver(x,y,u,v,'LineWidth',1,'filled');

感谢您的帮助!


edit : 使用行说明符执行以下操作:

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

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

【问题讨论】:

  • LineSpec一般为字符串如'-k'为黑线,'filled'为可指定的点标记。例如'-sk',它给出了正方形,但是这些将替换箭袋中的箭头。要修改箭袋,我建议您查看this previous question
  • @RTL :感谢其他问题的参考,这确实很有帮助,但我认为(如文档所建议的那样)应该有一种更简单的方法来做到这一点。关于 LineSpec,这是一个很好的方向,但说明符一般不包括所有常规规格,特别是:“quiver(x,y,u,v,'Linestyle','-sk')" 似乎不是有效的语法。
  • 尝试quiver(x,y,u,v,'-sk') 不需要'linestyle'。恐怕我不知道更简单的方法...(值得与quiver(x,y,u,v,'-sk','filled')比较,看看填充的效果)
  • 您的要求并不容易实现,因为 Matlab 会在箭袋图中构造从到线对象的每个箭头:一个用于尾部,一个用于头部。因此,箭头的样式不能像annotation('arrow',...) 那样改变。一种可能的方法是使用fill(...) 将每个箭头线对象替换为多边形。

标签: matlab plot


【解决方案1】:

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

我决定通过检索箭头提示的位置、删除它们并用fill 重新绘制它们来解决这个问题(就像 Deve 建议的那样)。我注意到我可以告诉fill,一个多边形结束,下一个多边形通过插入NaN 值开始(这也是原始箭头提示的绘制方式,您可以查看原始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,这里分别是黑色和红色。

【讨论】:

  • 抱歉,搞砸了不同的方法。我更新了代码,现在它应该可以工作了。谢谢指正!
【解决方案2】:

实际上,此代码在类似问题的答案中运行良好。它使用注释。

In Matlab how do I change the arrow head style in quiver plot?

【讨论】:

  • 请简要说明该问题页面的内容是什么以及它如何解决这个问题。
猜你喜欢
  • 2022-01-18
  • 2016-06-26
  • 2013-09-17
  • 1970-01-01
  • 2016-07-04
  • 2017-03-17
  • 1970-01-01
  • 2017-02-22
  • 2018-07-27
相关资源
最近更新 更多