【MATLAB学习笔记】绘图——去除上、右边框刻度

前言

  这是本人在学习MATLAB中的一些笔记,可能许多不足之处,欢迎批评指正。

绘图

  MATLAB的绘图命令为plot,并且可以设置坐标标题(xlabel,ylabel),设置图例(legend)以及图标题(title)。
  一般来说,对于理工类的绘图是不需要title的,而title应该在写文章时放在图片的正下方(详情见论文规范)。
  下面给出这些命令的相关用法:

  一般在写MATLAB脚本时,在前面加上这个语句,清除所有的工作区变量、命令行内容和关闭所有图片:

clc;clear;close all

下面模拟一些数据:

x = 0:0.01:1;   % 产生0到1, 步长为0.01的序列
y = 2*x + 1;    % y为x一次函数
rng(100)    % 随机数种子,使每次随机数都是一样的
r = (rand(1,length(x)) - 0.5) * 2;  %产生-1到1的随机数
y1 = y + r*0.5; %对y施加扰动(为了模拟数据)

plot函数绘图:
  下面这两种方式是等价的,f = figure(1)是表示当前图为第一个图,类似的可以有 figure(2), figure(3)…(绘图习惯)

  • 方式1
f = figure(1);
plot(x,y,x,y1) 
  • 方式2
f = figure(1);
plot(x,y) 
hold on
plot(x,y1) 

可以得到下图
在这里插入图片描述

添加轴标题,图例,比如x轴为位移,y轴为力:

xlabel('位移 x/mm')
ylabel('力 y/N')
legend('拟合数据','原始数据')

在这里插入图片描述

全局字体字号

  对于大多数的论文要求,中文为宋体,英文字体为Times New Roman,这时就需要对原始绘图命令进行修改。
  设置全局字体、字号,其中gca为当前绘图区,下面该语句的意思是:将当前绘图区的字体和字号设置为Times New Roman和13号。

set(gca,'FontName','Times New Roman','FontSize',13)

在这里插入图片描述

  这时候发现标签、坐标轴标题的字体不显示了,这是因为Times New Roman没有中文字体的原因,因此需要单独对局部的字体进行设置。

局部字体字号

  这直接在xlabel、ylabel、length后面修改就行,这里最好写在设置全局字体的后面,具体原因可以自己去尝试一下有什么不同。

xlabel('位移 x/mm','FontName','宋体')
ylabel('力 y/N','FontName','宋体')
legend('拟合数据','原始数据','FontName','宋体')

在这里插入图片描述

  到这里又会发现,xlabel、ylabel的英文也跟着变成宋体了。对于中英文混合的,可以直接在段落中进行设置,格式为 \fontname{字体名字} xxx,注意xxx包括后面所有的文字、字母、数字、符号等。

xlabel('\fontname{宋体} 位移 \fontname{Times New Roman} x/mm')
ylabel('\fontname{宋体} 力 \fontname{Times New Roman} y/N')

在这里插入图片描述

  再设置一下斜体\it xxx,或者设置正体\rm xxx,注意这里xxx同样包括后面所有的文字、字母、数字、符号等。

xlabel('\fontname{宋体} 位移 \fontname{Times New Roman} \it x/\rm mm')
ylabel('\fontname{宋体} 力 \fontname{Times New Roman} \it y/\rm N')

在这里插入图片描述

修改线型样式、调整图例

  下面再针对线型进行调整,直接在plot函数里加就行(更多的线型、标记符号自行查看plot帮助文档)

plot(x,y,'-k',x,y1,'ok','LineWidth',1.3) 

在这里插入图片描述

再调整一下图例位置(直接在legend上修改),并且将图例边框取消

legend('拟合数据','原始数据','FontName','宋体','Location','northwest')
legend('boxoff')    %取消图例边框

在这里插入图片描述

加网格线、次刻度线

添加网格线

grid on     % 添加网格线
ax = gca;   % 将当前坐标区实例化
ax.GridLineStyle = '--';    % 设置网格线样式
ax.GridColor = [0.5,0.5,0.5];   % 设置颜色
ax.GridAlpha = 0.5; % 设置透明度

添加次刻度线

set(gca,'XMinorTick',true)
set(gca,'YMinorTick',true)

在这里插入图片描述

细节调整

去除上边框、右边框刻度线

  可以看到上框线和右框线也出现了刻度,有时候是我们不想要的,但MATLAB目前又没有办法直接设置,为此我们可以用一个新的坐标区去代替上、右框线。
在这里插入图片描述

实现过程如下:

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

修改成白色背景

周围的灰色的部分,可以改成白色

set(0,'defaultfigurecolor','w');

在这里插入图片描述

隐藏图例背后的刻度线

  有时候我们希望将图例的背景网格线隐藏,这时可以将将图例边框重新打开(前面legend(‘boxoff’)关闭了),然后将边框颜色改成白色就可以了

le = legend('拟合数据','原始数据','FontName','宋体','Location','northwest');
le.EdgeColor = 'w';
le.LineWidth = 1.3;

在这里插入图片描述

保存图片

  绘图好后需要将图片按一定的分辨率进行保存,下面提供了两种方法对图片进行保存。

print函数带白边保存

  print函数中,f为当前图的实例对象( 就是前面定义了f=figure(1)中的f ),当然还有其他的输入格式(见帮助文档);‘-djpeg’为图片格式为.jpg,’-dpng’对应图片格式为.png;‘Infww’为文件名字,当然也可以取别的名字;’-r600’表示图片分辨率为600dpi。

print(f,'-djpeg','Infww','-r600')%保存图像

  红色的边框为保存图片时的边界,实际保存的时候是没有这个红色边框的,这里只是起到一个说明的作用。
红色的边框为保存图片时的边界

exportgraphics函数删除白边保存

  exportgraphics函数可以将白边尽可能的去除,f与print函数中f的意义一样,也是当前图的实例;‘Infww.png’,表示文件名加图片后缀;‘Resolution’,600 设置分辨率为600dpi。

exportgraphics(f,'Infww.png', 'Resolution',600)

  红色的边框为保存图片时的边界,实际保存的时候是没有这个红色边框的,这里只是起到一个说明的作用。
在这里插入图片描述

总代码

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

%% 数据
x = 0:0.01:1;   % 产生0到1, 步长为0.01的序列
y = 2*x + 1;    % y为x一次函数
rng(100)    % 随机数种子,使每次随机数都是一样的
r = (rand(1,length(x)) - 0.5) * 2;  %产生-1到1的随机数
y1 = y + r*0.5; %对y施加扰动(为了模拟数据)

%% 绘图
f = figure(1);
plot(x,y,'-k',x,y1,'ok','LineWidth',1.3) 

% plot(x,y) 
% hold on
% plot(x,y1) 
%
set(gca,'FontName','Times New Roman','FontSize',13)
xlabel('\fontname{宋体} 位移\fontname{Times New Roman} \it x/\rm mm')
ylabel('\fontname{宋体} 力\fontname{Times New Roman} \it y/\rm N')

% 图例
le = legend('拟合数据','原始数据','FontName','宋体','Location','northwest');
% legend('boxoff')    %取消图例边框
le.EdgeColor = 'w';
le.LineWidth = 1.3;

% 设置网格线
grid on     % 添加网格线
ax = gca;   % 将当前坐标区实例化
ax.GridLineStyle = '--';    % 设置网格线样式
ax.GridColor = [0.5,0.5,0.5];   % 设置颜色
ax.GridAlpha = 0.5; % 设置透明度

% 设置次刻度线
set(gca,'XMinorTick',true)
set(gca,'YMinorTick',true)

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

% 保存图片
print(f,'-djpeg','Infww','-r600')%保存图像
exportgraphics(f,'Infww.png', 'Resolution',600)

总结

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Infww

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

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

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

打赏作者

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

抵扣说明:

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

余额充值