Matlab去掉顶部和右侧刻度线并保留方框

19
在Matlab图中,我想仅从顶部和右侧轴中删除刻度线,同时保持绘图框。
我知道如果关闭绘图框,顶部和右侧的刻度线将消失。但是,这不是我想要的。换句话说,我想保留底部和左侧的刻度线,并同时保持绘图框。

2
这是其中一件你无法优雅地完成的事情。你必须采用巧妙的手段。如果你想要将两个轴彼此连接,其中一个为 x 轴,另外两个为分别位于两侧的独立 y 轴,最简单的方法是将两个轴都设置为 box off。然后将第二个轴的 x 轴移动到顶部,删除刻度和轴标签,这样就可以完美地关闭图像了。 - j_kubik
好的,谢谢!我无法在这里很好地编辑代码,但我将代码放在下面。 figure lw = 2; x=0:5:10; plot(x,x) a1 = gca; set(a1,'box','off','tickdir','out','xticklabel',{},'yticklabel',{},... 'linewidth',lw,'Xtick',[0:5:10],'ytick',[0:5:10]) axis square a2 = copyobj(a1,gcf); set(a2,'color','none','xaxislocation','top','yaxislocation','right','xtick',[],'ytick',[]) - Daisuke Takeshita
3个回答

12

我的解决方法类似于@j_kubik的建议:

plot(1:10)
% get handle to current axes
a = gca;
% set box property to off and remove background color
set(a,'box','off','color','none')
% create new, empty axes with box but without ticks
b = axes('Position',get(a,'Position'),'box','on','xtick',[],'ytick',[]);
% set original axes as active
axes(a)
% link axes in case of zooming
linkaxes([a b])

我之前不知道linkaxes这个函数,它确实是一个很好的改进。谢谢! - Daisuke Takeshita
更新:对于Matlab 2014及更高版本的用户,请使用linkprop替换linkaxes - Carl Witthoft
@CarlWitthoft 我认为linkaxes在2014年及以后仍然有效。调用linkprop([a b])会导致错误。 - Delyle
@Delyle 是的,它仍然有效,但正如帮助页面所说,“请参见linkprop函数,以获取更高级的功能,允许您链接任何图形对象上的对象属性”。是的,参数列表略有不同(显而易见):-) - Carl Witthoft

0

现在是2022年,如果有人仍然对除了盒子选项以外的快速解决方案感兴趣,这是我的答案:

figure  
plot(1:10) ;  
ax = gca ;  
ax.Box = 'off'  ;  
xline(ax.XLim(2),'-k', 'linewidth',ax.LineWidth);  
yline(ax.YLim(1),'-k', 'linewidth',ax.LineWidth);

0
你可以使用box off命令去除刻度线,然后再使用plot命令绘制回箱子。例如:
figure
hold on
box off
plot(1:10)
plot([1,10],[10, 10],'k')
plot([10,10],[1,10],'k')

谢谢您的建议。我尝试了一下,但是效果不如我所愿。当我将线宽设置得更粗时,比如3,那么在顶部和右侧绘制的线(使用plot绘制的线)看起来比坐标轴(左侧和底部的线)要细,即使我在使用plot和axes绘制的框中使用相同的线宽。 - Daisuke Takeshita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接