Matlab提供了繪製箭頭的函數,如以下函數及效果圖,可見,此函數繪製的範圍限定在[0, 1]之間,如果要在指定位置繪製箭頭,則此方法不可取,需要重新定義繪圖函數,將實際座標換算到[0, 1]之間。
annotation('arrow', [0, 1], [0, 1]);
![]()
源代碼
function PlotLineArrow(obj, x, y, markerColor, lineColor)
% 繪製帶箭頭的曲線
% 繪製散點圖
plot(x, y, 'o', 'Color', markerColor, 'MarkerFaceColor', markerColor);
% 獲取 Axes 位置
posAxes = get(obj, 'Position');
posX = posAxes(1);
posY = posAxes(2);
width = posAxes(3);
height = posAxes(4);
% 獲取 Axes 範圍
limX = get(obj, 'Xlim');
limY = get(obj, 'Ylim');
minX = limX(1);
maxX = limX(2);
minY = limY(1);
maxY = limY(2);
% 轉換座標
xNew = posX + (x - minX) / (maxX - minX) * width;
yNew = posY + (y - minY) / (maxY - minY) * height;
% 畫箭頭
annotation('arrow', xNew, yNew, 'color', lineColor);
示例
clear; clc;
x = 1 : 10;
y = sin(x);
plot(x, y, '.')
hold on
for i = 1 : 9
PlotLineArrow(gca, [x(i), x(i + 1)], [y(i), y(i + 1)], 'b', 'r')
end
hold off
效果圖
![]()
說明: 先繪製原來的圖,建議用.表示,後面會被覆蓋,確定好Axes,得到相關的信息,然後逐點繪製箭頭。