【MATLAB学习笔记】绘图——在绘图区添加箭头标注

前言

  采用MATLAB中的annotation函数对已有绘图添加注释,并且提供了一个非常方便调整位置参数的小技巧。

准备数据

    随机生成一些数据,rng(100)为设置随机数种子为100,保证每次运行代码产生的随机数是一样的。

%% 数据
rng(100)    % 设置随机数种子
% 随机生成数据
x = 0:0.01:2;
y = 2*x.^2 + x + 1;
yy = y*(1+rand());

绘图

f = figure('Name','标注');
plot(x,y,'-k','LineWidth',1.3)
hold on
plot(x,yy,'--k','LineWidth',1.3)

在这里插入图片描述

添加注释

添加注释采用annotation函数:

  • annotation(lineType,x,y) 创建一个在当前图窗中的两个点之间延伸的线条或箭头注释。将 lineType 指定为 ‘line’、‘arrow’、‘doublearrow’ 或 ‘textarrow’。将 x 和 y 分别指定为 [x_begin x_end] 和 [y_begin y_end] 形式的二元素向量。
对象类型示例
‘line’注释线条annotation(‘line’,[.1 .2],[.1 .2])
‘arrow’注释箭头annotation(‘arrow’,[.1 .2],[.1 .2])
‘doublearrow’注释双箭头annotation(‘doublearrow’,[.1 .2],[.1 .2])
‘textarrow’注释文本箭头。要在文本箭头的末尾添加文本,请使用 string 属性。annotation(‘textarrow’,[.1 .2],[.1 .2],‘string’,‘my text’)

这是最常用的是textarrow,下面重点介绍该类型。

textarrow

    这是变量Str为注释的内容,[0.5,0.5],[0.5,0.5]和an.Position表示箭头两点的坐标以及位置,刚开始可以随便给,后续再进行调整。

% 添加注释
Str = '$2x^2 + x + 1$';
an = annotation('textarrow',[0.5,0.5],[0.5,0.5],...
    'Interpreter','latex','String',Str,'FontSize',13);
an.Position = [0.7,0.7,-0.06,-0.07];
an.LineWidth = 1;

在这里插入图片描述
    可以看到,上图中已经出现了注释,但是注释的位置不是自己想要的位置,下面来对注释的位置进行调整。

调整注释位置

  • 点击这个“打开属性检查器”按钮后会弹出右边的属性对话框。

在这里插入图片描述

  • 然后首先点击注释的箭头,然后在右边的属性对话框点击位置。

在这里插入图片描述

  • 这个时候可以手动拖动注释箭头到合适的位置,查看属性对话框中的位置下的X、Y和Position,将值复制到对应数组中。

在这里插入图片描述

  • 对应关系如下图

在这里插入图片描述

相应修改后的代码如下:

Str = '$2x^2 + x + 1$';
an = annotation('textarrow',[0.735714285714286,0.705714285714286],[0.327619047619048,0.415238095238095],...
    'Interpreter','latex','String',Str,'FontSize',13);
an.Position = [0.735714285714286,0.327619047619048,-0.03,0.087619047619048];
an.LineWidth = 1;

再次运行,就可以得到相应位置的注释了。
在这里插入图片描述

细节调整

    细节调整详细的解释可以看这篇文章,此外这里还额外设置了设置次刻度线范围(一个主刻度中次刻度线的数量)。

% 设置次刻度线范围
ax = gca;
ax.YAxis.MinorTickValues = 0:1:18;  

若不设置,则为下面的左图,右图为设置后的样式。



其他细节调整:

% 设置x轴的属性
xlabel('$x$','Interpreter','latex')
set(gca,'XMinorTick',true)

% 设置坐标轴的属性
ylabel('$y$','Interpreter','latex')
set(gca,'YMinorTick',true)

% 设置坐标轴的粗细
set(gca,'lineWidth',1)

% 设置刻度线的长度
set(gca,'TickLength',[0.015,0.05])

% 去除上、右边框的刻度线
box off     % 取消边框
ax1 = axes('Position',get(gca,'Position'),'XAxisLocation','top',...
    'YAxisLocation','right','Color','none','XColor','k','YColor','k');  % 设置坐标区
set(ax1,'linewidth',1)
set(ax1,'XTick', [],'YTick', []);   % 去掉xy轴刻度

保存图片

%%  保存图片
exportgraphics(f,'Infww_an.png', 'Resolution',600)

在这里插入图片描述

总代码

clc;clear;close all
set(0,'defaultfigurecolor','w');

%% 数据
rng(100)    % 设置随机数种子
% 随机生成数据
x = 0:0.01:2;
y = 2*x.^2 + x + 1;
yy = y*(1+rand());
%% 绘图
f = figure('Name','标注');
plot(x,y,'-k','LineWidth',1.3)
hold on
plot(x,yy,'--k','LineWidth',1.3)

% 添加注释
Str = '$2x^2 + x + 1$';
an = annotation('textarrow',[0.735714285714286,0.705714285714286],[0.327619047619048,0.415238095238095],...
    'Interpreter','latex','String',Str,'FontSize',13);
an.Position = [0.735714285714286,0.327619047619048,-0.03,0.087619047619048];
an.LineWidth = 1;
an.HorizontalAlignment = "center";

% 设置次刻度线范围
ax = gca;
ax.YAxis.MinorTickValues = 0:1:18;  
% 设置全局字体
set(gca,'FontName','Times New Roman','FontSize',13)

% 设置x轴的属性
xlabel('$x$','Interpreter','latex')
set(gca,'XMinorTick',true)

% 设置坐标轴的属性
ylabel('$y$','Interpreter','latex')
set(gca,'YMinorTick',true)

% 设置坐标轴的粗细
set(gca,'lineWidth',1)

% 设置刻度线的长度
set(gca,'TickLength',[0.015,0.05])

% 去除上、右边框的刻度线
box off     % 取消边框
ax1 = axes('Position',get(gca,'Position'),'XAxisLocation','top',...
    'YAxisLocation','right','Color','none','XColor','k','YColor','k');  % 设置坐标区
set(ax1,'linewidth',1)
set(ax1,'XTick', [],'YTick', []);   % 去掉xy轴刻度

%%  保存图片
exportgraphics(f,'Infww_an.png', 'Resolution',600)

总结

  这只是一个基础的示例,实际中还会有更具体的、更细致的要求,这就需要再做额外调整;另外本人也仍在学习中,这只是个人的学习笔记,可能还有一些不足之处,欢迎指正。

  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Infww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值