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

目录

  • 前言
  • 准备数据
  • 添加注释
  • textarrow
  • 调整注释位置
  • 细节调整
  • 保存图片
  • 总代码
  • 总结

前言

  采用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)

【MATLAB学习笔记】绘图——在绘图区添加箭头标注_第1张图片

添加注释

添加注释采用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;

【MATLAB学习笔记】绘图——在绘图区添加箭头标注_第2张图片
    可以看到,上图中已经出现了注释,但是注释的位置不是自己想要的位置,下面来对注释的位置进行调整。

调整注释位置

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

【MATLAB学习笔记】绘图——在绘图区添加箭头标注_第3张图片

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

【MATLAB学习笔记】绘图——在绘图区添加箭头标注_第4张图片

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

【MATLAB学习笔记】绘图——在绘图区添加箭头标注_第5张图片

  • 对应关系如下图

【MATLAB学习笔记】绘图——在绘图区添加箭头标注_第6张图片

相应修改后的代码如下:

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;

再次运行,就可以得到相应位置的注释了。
【MATLAB学习笔记】绘图——在绘图区添加箭头标注_第7张图片

细节调整

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

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

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

【MATLAB学习笔记】绘图——在绘图区添加箭头标注_第8张图片【MATLAB学习笔记】绘图——在绘图区添加箭头标注_第9张图片

其他细节调整:

% 设置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)

【MATLAB学习笔记】绘图——在绘图区添加箭头标注_第10张图片

总代码

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)

总结

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

你可能感兴趣的:(MATLAB学习笔记,matlab,学习,笔记)