【问题标题】:Minor ticks for pcolor with log-log scaling具有对数缩放比例的 pcolor 的小刻度
【发布时间】:2015-01-23 16:57:30
【问题描述】:

以下代码几乎完全符合我的要求 (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 matlab-figure


    【解决方案1】:

    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)。

    这将绘制:

    如果您还希望显示 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' ) ;
    

    【讨论】:

    • 这太棒了,霍基。只有一个问题:是否可以在图表的所有四个边上都画出刻度?
    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 2020-12-28
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    相关资源
    最近更新 更多