下面的代码几乎完全符合我的要求(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图上使用日志大小的小滴答标记呢?
发布于 2015-01-23 17:54:50
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' ) ;https://stackoverflow.com/questions/28114861
复制相似问题