轮廓中缺少刻度线

Ticks missing in contourf

我想以对数值绘制刻度线(没有标签,只有刻度线)。出于某种原因,以下代码没有绘制它们(set(gca,'XTick') 没有做任何事情):

figure1=figure(1)
axes1 = axes('Parent',figure1,'YScale','log','XScale','log');
grid(axes1,'on');
hold(axes1,'on');
[C,h]=contourf(lamx(2:NKX+1),lamz(2:NKZ+1),phi2d(2:NKX+1,2:NKZ+1)',[10],'LineColor','none');
clabel(C,h);
axis tight;    
axis([lamx(end) max(lamx) lamz(end) max(lamz)]) 
xlabel('\lambda_x','Fontsize',20);
ylab=ylabel('\lambda_z','Fontsize',20);
set(gca,'XTick',0.1:0.1:1)
grid on
set(gcf, 'PaperPositionMode','auto'); 
set(ylab, 'Units', 'Normalized', 'Position', [-0.1, 0.5, 0]);
set(gca,'linewidth',1.5,'FontSize',16)
colormap(flipud(gray(256)));
colorbar;  
print('-dpng','-opengl','-r1200','2dspec')

如何绘制刻度线?

您示例中的刻度线被 Contour 对象本身遮盖了。 Axes 元素相对于其中对象的绘制顺序由 Axes Layer 属性.

控制

这个 属性 的默认值是 bottom 这意味着像在轴上绘制的填充轮廓之类的东西将被绘制在刻度的顶部,你将无法看到他们。 contourf 函数显然知道这不是一个有用的默认值,因为它通常会在您调用它时将 属性 更改为 top ,因为它通常会将 属性 更改为 top Axes NextPlot 设置为 replace。通过调用 hold on,您还导致 contourf 单独留下 属性,因此它最终停留在 bottom

在您的示例中,您可以通过以下两种方式之一处理此问题。

  1. 正如目前所写的那样,hold(axes1,'on'); 行没有故意的效果,因为您只添加了一个情节。因此,如果您的完整代码不依赖它,您可以删除该行。否则,

  2. 在创建轴时从一开始就将 Layer 属性 设置为 top:

    axes1 = axes('Parent',figure1,'YScale','log','XScale','log','Layer','top');