我一直试图在Matlab中绘制箭头但是它们看起来都很糟糕。 另外,我希望我的箭头是一个实心三角形,而不是V。
我尝试使用Matlab文件交换中提供的软件包:箭头,箭头,箭头3,可能至少还有一个。
我甚至尝试在Matlab图形编辑器中手动创建一个箭头,但是当我调整线宽时,箭头看起来像这样:
我使用 注释 命令创建上面的箭头:
annotation(gcf,'arrow',[0.621875 0.457916666666667],...
[0.205421152030217 0.40755429650614],...
'HeadLength',4,'LineWidth',5);
以下是尝试使用此处提供的 箭头 包的结果:Arrow.m(注意底部箭头不垂直于线:
我甚至尝试过以下操作,下面是结果(注意可怕的箭头):
figure
plot(1:10, 1:10)
annotation(gcf,'arrow',[0.621875 0.457916666666667],...
[0.205421152030217 0.40755429650614],...
'HeadLength',4,'LineWidth',5);
答案 0 :(得分:4)
矢量图形很难。虽然Matlab的排版也同样糟糕,但这里是一个简单的基于文本的解决方案(我不再在Matlab中做这种注释):
figure
plot(1:10, 1:10)
text(5,4,'\rightarrow','FontSize',54,'Rotation',135,...
'HorizontalAlignment','center');
产生这样的数字
请注意,我使用了'\leftarrow'
,因为它指向零度方向,这使得我的脑中数学变得更容易。这不是固定解决方案,您仍然需要摆弄位置以克服Matlab将其作为文本对齐的事实(请参阅'Extent'
和'Margin'
属性)。毫不奇怪,你可能会看到小故障。 LaTeX解释器可用于获取不同的样式箭头:
text(5,4,'$\rightarrow$','FontSize',54,'Rotation',135,...
'HorizontalAlignment','center','Interpreter','latex');
我没有使用此选项获得小故障,但箭头看起来不同(可能有其他可替代的LaTeX箭头样式)。更改字体也可能有效,并且肯定可以使用其他基于文本的箭头。有关添加箭头的更多详细信息,请参阅this article from The MathWorks。
答案 1 :(得分:3)
另一个解决方案是使用开源Waterloo graphics - 一个通过提供可以轻松集成到Matlab中的纯Java二维图形函数库来解决这个问题的库。查看一些示例here ...
例如,尝试此代码(正确安装滑铁卢后)
f = GXFigure();
x = -5:0.1:5;
gr1 = gxgca();
a1 = line(gr1, x, cos(x), 'LineSpec','-ob');
b1 = line(gr1, x, sin(x), 'LineSpec','-sg');
annotation(gr1,'arrow',[0.1 0.1],[0.4 0.4],'HeadLength',0.2,'HeadWidth', 0.5, 'LineWidth',2);
gr1.getObject().getView().autoScale();
答案 2 :(得分:2)
与Matlab合作超过10年,并且看到图表的质量几乎没有进展(抗锯齿输出到位图,看起来很好看的eps文件......),我决定我的长期解决方案将会是here。一些体面的箭头here的例子,更漂亮的图here。不幸的是,一些工具箱阻止我完全转向numpy / scipy / matplotlib。我知道这更像是一个咆哮而不是答案,但那是我的解决方案......
答案 3 :(得分:1)
使用quiver或quiver3进行三维绘图肯定会比使用注释创建的最后一个箭头更好。我不确定它看起来会比你使用Arrow.m软件包做得好多少。如果你愿意,也可以改变箭袋上的stlyes。
答案 4 :(得分:1)
我在那里安装InkScape并绘制箭头。没有什么比简单和质量更好了。
答案 5 :(得分:0)
当基于行的箭头失败时,您可以随时尝试patch-based个:
xArrow = [0 1 1 1.2 1 1 0]; % X-coords of arrow edge points
yArrow = [-0.1 -0.1 -0.2 0 0.2 0.1 0.1]; % Y-coords of arrow edge points
hArrow = fill(xArrow,yArrow, [1 0 0]); % Plot a red arrow
axis equal % Set axis tick marks to be equal
虽然功能更多,但您可以将上述内容参数化为一个函数,该函数需要许多参数来调整箭头的缩放比例,宽高比,旋转和位置。您甚至可以调整颜色,边线颜色和Alpha透明度。
这种想法似乎已由François Beauducel在其文件交换提交ARROWS: generalized 2-D arrows plot中实施。
答案 6 :(得分:0)
现在有date
(完全披露:我编写/出售工具箱),它使用低级别的Matlab命令,如plot()
和patch()
来绘制中级形状,如箭头。语法示例:
davinci( 'arrow', 'X', [0 10], ...
'Y', [0 2], ...
'Shaft.Width', 1, ...
'Head.Length', 2.5, ...
'Color', 'w', ...
'EdgeColor', 'k', ...
'LineWidth', 2.5 )
来自文档: