在用Matlab进行绘图时,如果显示坐标区轮廓,也就是‘box on’状态,有的时候,会感觉上方和右侧轮廓上的刻度有些难看、有些多余:
而如果不显示坐标区轮廓,也就是‘box off’状态,又会感觉有些空洞:
于是想:有没有办法,只显示上方和右侧的坐标区轮廓,但是不显示其上的刻度线呢?
找了一下,Matlab中似乎并没有单独的命令可以得到这样的效果。
但是,如果脑袋灵活些,办法总比困难多。
这里简单介绍两种思路。
1. 画线法
这一方法的思路非常简单,就是在坐标区上方和右侧的边缘,使用plot或者line命令画两条线(绘制前需要box off):
具体来说,当我们作图完成,且坐标区的属性也调节完毕后:
lw = 1; % 坐标轴线宽
x = 0:0.1:2*pi;
y = sin(x);
figure
plot(x,y,'linewidth', 1.5, 'color', 'c')
set(gca,'box', 'off',...
'linewidth',lw,...
'TickDir','out',...
'xlim', [0 2*pi],...
'ylim', [-1.2 1.2])
首先找到坐标区四个顶点的位置:
XL = get(gca,'xlim'); XR = XL(2);
YL = get(gca,'ylim'); YT = YL(2);
然后使用plot命令在坐标区边界的上方和右侧分别绘制一条直线:
plot(XL,YT*ones(size(XL)),'color',xc,'linewidth',lw)
plot(XR*ones(size(YL)),YL,'color',yc,'linewidth',lw)
特别注意,绘制的两条线的属性,比如线宽、颜色等,应该与原坐标区框线的一致。
此外,上方和右侧的框线应该在所有属性都调整无误后再添加。
2. 新建坐标区法
这一方法的思路就是在原坐标区位置再使用axes命令重新绘制一个没有刻度的坐标区:
具体来说,当我们作图完成,且坐标区的属性也调节完毕后:
lw = 2; % 坐标轴线宽
x = 0:0.1:2*pi;
y = sin(x);
figure
plot(x,y,'linewidth', 1.5, 'color', 'r')
set(gca, 'box', 'off',...
'linewidth',lw,...
'TickDir','out',...
'xlim', [0 2*pi],...
'ylim', [-1.2 1.2])
使用axes命令在原gca的position创建一个坐标区,其中x和y轴的刻度设置为上方和右侧:
ax = axes( 'Units', unit,...
'Position',get(gca,'Position'),...
'XAxisLocation','top',...
'YAxisLocation','right',...
'Color','none',...
'XColor',xc,...
'YColor',yc);
然后,将x和y轴的刻度设置为空即可:
set(ax, 'linewidth',lw,...
'XTick', [],...
'YTick', []);
同样要注意,绘制的坐标区轮廓的属性,比如线宽、颜色等,应该与原坐标区框线的一致。
特别要注意的是,上方和右侧的框线应该在所有属性都调整无误后再添加,否则,由于改变了x、y坐标轴的位置,很多命令,比如xlabel,ylabel等,都会有问题。
以上。
示例程序获取方式:
Matlab示例程序