pcolor的小刻度与对数日志缩放

时间:2015-01-23 16:57:30

标签: matlab matlab-figure

以下代码几乎完全符合我的要求(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图上使用对数缩放的次刻度标记?

1 个答案:

答案 0 :(得分:2)

Matlab对次要网格和刻度不提供很多控制。你可以设置他们的可见性开启或关闭(显然你已经受到限制),但你不能设置他们的价值/位置/数字等......

绕过它的方法是完全关闭保存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)。

这将绘制: logticks

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


如果你还想要右边的Y刻度标记,你只需要重复相同的事情(差不多)。添加其他轴,这次指定XAxisLocationTopYAxisLocationright

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' ) ;