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