【MATLAB学习笔记】绘图——去除上、右边框刻度后图被框线覆盖解决方案

前言

  在Matlab绘图中可以通过这篇文章的方法去除上、右边框刻度线,但如果绘图区的点或者线是彩色的,则会出现绘图区中的点或者线被上、右边框覆盖的情况,下面的这个方法可以解决这个问题。

图层覆盖问题

  将前面这篇文章中的点修改成彩色后就会导致点被右边框覆盖一部分。

% 将plot(x,y,'-k',x,y1,'ok','LineWidth',1.3)修改成了下面的彩色点
plot(x,y,'-k',x,y1,'or','MarkerFaceColor','r','LineWidth',1.3) 

在这里插入图片描述

解决方案

  解决这个问题只需要将右、上刻度线的绘图区置于底层,同时设置原本的绘图区背景为透明色。
  原本的代码

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

  修改后的代码

box off     % 取消边框
ax1 = axes('Position',get(gca,'Position'),'XAxisLocation','top',...
    'YAxisLocation','right','color','none','XColor','k','YColor','k');  % 设置坐标区
set(ax1,'XTick', [],'YTick', []);   % 去掉xy轴刻度
set(ax,'color','none')  % 设置绘图区背景为透明色
uistack(ax1,'bottom')   % 设置新绘图区位于最底层
hold off

  下面的图为修改后的图,可以看到右上角的点已经没有被右框线覆盖了。
在这里插入图片描述

需要注意的点

  ax在设置网格线的时候已经赋值为gca了。

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

  如果没有设置网格线,则需要在去除刻度线之前为ax赋值,即添加ax = gca。

% 设置网格线
ax = gca;   % 将当前坐标区实例化
box off     % 取消边框
ax1 = axes('Position',get(gca,'Position'),'XAxisLocation','top',...
    'YAxisLocation','right','color','none','XColor','k','YColor','k');  % 设置坐标区
set(ax1,'XTick', [],'YTick', []);   % 去掉xy轴刻度
set(ax,'color','none')  % 设置绘图区背景为透明色
uistack(ax1,'bottom')   % 设置新绘图区位于最底层
hold off

总代码

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,'-k',x,y1,'or','MarkerFaceColor','r','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)

% 去除上边框、右边框刻度线
ax = gca;   % 将当前坐标区实例化
box off     % 取消边框
ax1 = axes('Position',get(gca,'Position'),'XAxisLocation','top',...
    'YAxisLocation','right','color','none','XColor','k','YColor','k');  % 设置坐标区
set(ax1,'XTick', [],'YTick', []);   % 去掉xy轴刻度
set(ax,'color','none')  % 设置绘图区背景为透明色
uistack(ax1,'bottom')   % 设置新绘图区位于最底层
hold off

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

总结

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

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Infww

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

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

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

打赏作者

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

抵扣说明:

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

余额充值