其他分享
首页 > 其他分享> > 如何在 Matlab 中绘制带箭头的坐标系

如何在 Matlab 中绘制带箭头的坐标系

作者:互联网

如何在 Matlab 中绘制带箭头的坐标系


实现原理

使用 matlab 的绘制函数时,默认设置为一个方框形的坐标系,

图1

如果想要绘制的如下图所示中的带箭头的坐标系,需要如何实现呢?

图2

这里首先介绍 Matlab 自带的一个图窗标注函数 annotation,具体用法请点击查看文档,简而言之,该函数可以在图窗指定位置绘制图形(箭头,矩形,椭圆等)或文字。其中绘制箭头的调用格式为

arrow_obj = nnotation(fig_obj, 'arrow', [x0, x1], [y0, y1]);

x0,y0 表示的箭头末端(无箭头)在图窗的位置坐标;x1,y1 表示的箭头始端(有箭头)在图窗的位置坐标。(说明:图窗对象的坐标原点在左下角,水平方向为x方向,竖直方向为y方向,位置坐标均为归一化坐标,即范围为0~1)

也就是说,使用 annotation 完全可以实现绘制带箭头的坐标轴的目标,但是繁琐的地方在于如何精装的确定坐标轴在图窗的位置坐标。

稍微思索下,其实也不是很难。Matlab 可以很方便的提供 axis 对象在 figure 对象的位置,axis 对象的的取值范围、坐标轴的宽和高等属性。利用这点,我们很容易确定坐标原点\(O(0,0)\)在图窗中的位置坐标(任意点都是如此),再由 axis 对象的长宽属性很容易确定坐标轴在图窗的始末位置坐标。

具体计算公式如下:(实现于函数 CoorFromAxis2Fig.m

设 axis 对象的坐标轴的取值范围分别为 \([x_{min}, x_{max}]\), \([y_{min}, y_{max}]\);

调用函数可以查看

x_range = get(axis_obj, 'XLim');
y_range = get(axis_obj, 'YLim');

设 axis 对象在图窗的位置坐标为 \((X_0, Y_0)\),宽(沿 x 方向)为 \(W\),高(沿 y 方向)为 \(H\);

调用函数可以查看

[X0, Y0, W, H] = get(axis_obj, 'Position');

设待求点的 axis 坐标
为\((x_p, y_p)\),则该点在图窗的位置坐标为

\[X_p = \frac{x_p - x_{min}}{x_{max}-x_{min}} \cdot W + X_0 \]

\[Y_p = \frac{y_p - y_{min}}{y_{max}-y_{min}} \cdot H + Y_0 \]

有了这个函数,可以很方便计算出 axis 上的点在图窗的位置坐标,因此只需确定 axis 对象就可以很方便地绘制出待箭头的坐标系(具体实现见 DrawAxisWithArrow.m),同时如果想在坐标上某个位置标注文字也可以利用这个函数进行坐标转换(图2中文字均是调用 FigPointLabel.m 绘制)。


演示效果

效果还还不错~


完整代码

其中使用到的API功能描述如下,函数实现和用法详见源码和实例。

完整的函数代码和实例:

  1. Github:https://github.com/songWreng/MatlabDrawNiceGraph
  2. Gitee:https://gitee.com/iam002/MatlabDrawNiceGraph.git

标签:图窗,箭头,坐标轴,坐标,Matlab,绘制,坐标系,axis
来源: https://www.cnblogs.com/wreng/p/15150750.html