6

我一直试图在我的图中在 Matlab 中绘制箭头,但它们看起来都很糟糕。另外,我希望我的箭头是实心三角形,而不是 V。

我尝试使用 Matlab File Exchange 上可用的包:箭头、箭头、箭头 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);

在此处输入图像描述

4

7 回答 7

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 箭头样式可以替代)。更改字体也可能会产生影响,当然还有其他基于文本的箭头可以使用。有关添加箭头的更多详细信息,请参阅The MathWorks 的这篇文章

于 2013-08-13T17:41:15.593 回答
3

另一个解决方案是使用开源的滑铁卢图形库——该库通过提供一个可以轻松集成到 Matlab 中的 2D 图形函数的纯 Java 库来解决这个问题。在此处查看一些示例...

例如,试试这段代码(正确安装滑铁卢后)

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();

在此处输入图像描述

于 2013-08-13T23:14:28.750 回答
2

与 Matlab 合作了 10 多年,并且看到绘图质量几乎为零(位图的抗锯齿输出,看起来不错的 eps 文件,......),我决定我的长期解决方案将在这里这里有一些看起来不错的箭头示例,这里有更漂亮的图表。不幸的是,一些工具箱阻止我完全进入 numpy/scipy/matplotlib。我知道这更像是一个咆哮而不是一个答案,但这是我的解决方案......

于 2013-08-13T18:46:39.557 回答
1

将 quiver 或 quiver3 用于 3-D 绘图肯定会比您使用注释制作的最后一个箭头更好看。不过,我不确定它是否会比您使用 Arrow.m 包制作的更好。如果您愿意,也可以更改 quiver 上的样式。

于 2013-08-13T17:46:15.627 回答
1

我求助于安装 InkScape 并在其中绘制箭头。没有什么比简单和质量更好的了。

InkScape 网站

于 2014-07-17T16:00:37.623 回答
0

当基于行的箭头失败时,您始终可以尝试基于补丁的箭头:

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中实现。

于 2013-08-13T17:41:46.903 回答
0

现在有DaVinci Draw 工具箱(完全披露:我编写/出售工具箱),它使用低级 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 )

从文档中:

达芬奇箭头

于 2015-10-15T17:51:24.903 回答