具有对数对数缩放比例的 pcolor 的小刻度

Minor ticks for pcolor with log-log scaling

下面的代码几乎完全符合我的要求 (MATLAB R2010a)

[x,y] = meshgrid(logspace(-1,1,5),logspace(0,7,5));

pcolor(x,y,x.*y); shading interp;
set(gca, 'XScale', 'log', 'YScale', 'log');
set(gca,'YMinorTick','on');
set(gca,'Layer','top');

它制作的绘图中没有显示网格线,但主要和次要刻度线都可见。但是,当我用

替换第一行时
[x,y] = meshgrid(logspace(-1,1,10),logspace(0,7,10));

(也就是说,当我提高分辨率时)小刻度线突然消失了。那么,如何在大型数据集的 pcolor 图上使用对数标度的次要刻度线?

Matlab 不提供对次要网格和刻度的太多控制。您可以打开或关闭它们的可见性(显然您已经受到限制),但您不能设置它们的 value/position/number 等 ...

解决方法是完全关闭保存 pcolor 绘图的轴上的所有刻度和网格,然后在其顶部创建一个透明的空 axes,具有网格属性你定义的。

因为在这个空 axes 中没有绘图或其他图形对象,Matlab 在您设置的属性方面会表现得更好(它不会试图变得聪明并在后台更改一些东西).

所以对于你的情况,应该是这样的:

[x,y] = meshgrid(logspace(-1,1,10),logspace(0,7,10));
pcolor(x,y,x.*y); shading interp;
colormap(flipud(gray(64))) %// just so the grid lines are more visible

axbot = gca ;              %// retrieve the handle of the current axis
set(axbot, 'XScale', 'log', 'YScale', 'log');
axis off                   %// remove all ticks/grid etc...

%// now create the "overlay" axes, which replicate some of the properties of the underlying axis (position/limits etc ...)
axtop = axes('Position',get(axbot,'Position'),'Color','none',...
            'Xlim',get(axbot,'XLim'), 'Ylim',get(axbot,'YLim'),...
            'XScale', 'log', 'YScale', 'log' , ...
            'YMinorTick','on' , 'YMinorGrid','off') ;

请注意,一些属性只是从底层 axes 复制而来,而另一些属性是明确设置的(如 YMinorTickYMinorGrid)。

这将绘制:

如果您也想显示 Y 小网格,只需将 YMinorGrid 更改为 on


如果你也想要右边的Y刻度标记,你只需要重复同样的事情(几乎)。添加另一个轴,这次将 XAxisLocation 指定为 Top,将 YAxisLocation 指定为 right

axtopright = axes('Position',get(axbot,'Position'),'Color','none',...
            'Xlim',get(axbot,'XLim'), 'Ylim',get(axbot,'YLim'),...
            'XScale', 'log', 'YScale', 'log' , ...
            'YMinorTick','on' , 'YMinorGrid','off' , ...
            'XAxisLocation', 'Top','YAxisLocation','right' ) ;