仅删除轴线而不影响刻度和刻度标签

时间:2014-09-14 22:51:08

标签: matlab plot line axis matlab-figure

有没有办法只删除Matlab图中的轴线,而不会影响刻度和刻度标签。

我知道box切换了上下轴线和刻度线,这对我来说非常有效。
但我的问题是我想要消除底部和左边的线条(只有线条!),但保留刻度线和刻度标签。

任何技巧?

4 个答案:

答案 0 :(得分:8)

R2014b之前的Matlab版本的解决方案

您可以引入一个新的白色边框并将其放在顶部。

// example data
x = linspace(-4,4,100);
y = 16 - x.^2;

plot(x,y); hold on
ax1 = gca;
set(ax1,'box','off')  %// here you can basically decide whether you like ticks on
                      %// top and on the right side or not

%// new white bounding box on top
ax2 = axes('Position', get(ax1, 'Position'),'Color','none');
set(ax2,'XTick',[],'YTick',[],'XColor','w','YColor','w','box','on','layer','top')

%// you can plot more afterwards and it doesn't effect the white box.
plot(ax1,x,-y); hold on
ylim(ax1,[-30,30])

重要的是停用第二个轴的刻度,以保持第一个轴的刻度。

enter image description here

Luis Mendo's解决方案中,如果之后更改了轴属性,则绘制的线条将固定并保持在其初始位置。这不会发生在这里,他们会调整到新的限制。为每个命令使用正确的句柄,不会有太多问题。

Dan's solution更容易,但在 R2014b 之前不适用于Matlab版本。

答案 1 :(得分:8)

Yair Altman的Undocumented Matlab使用未记录的轴标尺演示了一种更清晰的方法:

plot(x,y);
ax1 = gca;
yruler = ax1.YRuler;
yruler.Axle.Visible = 'off';
xruler = ax1.XRuler;
xruler.Axle.Visible = 'off'; %// note you can do different formatting too such as xruler.Axle.LineWidth = 1.5;

这种方法的一个很好的特点是你可以单独格式化x和y轴线。

答案 2 :(得分:3)

another undocumented way(适用于MATLAB R2014b及更高版本)通过将标尺的'LineStyle'更改为'none'来删除线条。

示例:

figure;
plot(1:4,'o-');  %Plotting some data
pause(0.1);      %Just to make sure that the plot is made before the next step
hAxes = gca;     %Axis handle
%Changing 'LineStyle' to 'none'
hAxes.XRuler.Axle.LineStyle = 'none';  
hAxes.YRuler.Axle.LineStyle = 'none';
%Default 'LineStyle': 'solid', Other possibilities: 'dashed', 'dotted', 'dashdot'

output

这与使用标尺的'visible'属性的Dan's answer不同。

答案 3 :(得分:2)

你可以通过在它们上面画一条白线来“擦除”轴线:

plot(1:4,1:4) %// example plot

box off %// remove outer border
hold on
a = axis; %// get axis size
plot([a(1) a(2)],[a(3) a(3)],'w'); %// plot white line over x axis
plot([a(1) a(1)],[a(3) a(4)],'w'); %// plot white line over y axis

结果:

enter image description here


如@SardarUsama所述,在最近的Matlab版本中,您可能需要调整线宽以覆盖轴:

plot(1:4,1:4) %// example plot

box off %// remove outer border
hold on
a = axis; %// get axis size
plot([a(1) a(2)],[a(3) a(3)],'w', 'linewidth', 1.5); %// plot white line over x axis.
                                                     %// Set width manually
plot([a(1) a(1)],[a(3) a(4)],'w', 'linewidth', 1.5);