有没有办法只删除Matlab图中的轴线,而不会影响刻度和刻度标签。
我知道box
切换了上下轴线和刻度线,这对我来说非常有效。
但我的问题是我想要消除底部和左边的线条(只有线条!),但保留刻度线和刻度标签。
任何技巧?
答案 0 :(得分:8)
您可以引入一个新的白色边框并将其放在顶部。
// 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])
重要的是停用第二个轴的刻度,以保持第一个轴的刻度。
在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'
这与使用标尺的'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
结果:
如@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);