以下代码几乎完全符合我的要求(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图上使用对数缩放的次刻度标记?
答案 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
复制,而其他一些属性是明确设置的(例如YMinorTick
和YMinorGrid
)。
这将绘制:
如果您希望显示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' ) ;