【问题标题】:Matlab: Re-label default x-ticksMatlab:重新标记默认x-ticks
【发布时间】:2018-03-26 10:12:11
【问题描述】:

在 Matlab 图中,我将 x 轴定义为预累加数组 timeInSec

y = data;
x = timeInSec;
plot(x , y);

绘图上生成的 x 轴如下所示:

此处的刻度和刻度值(00.511.522.5)是由 Matlab 自动生成的。我对他们很满意。

但现在我想自定义更改刻度值标签。比如:

timeInHrMin = datestr(tickValues, 'HH:MM')
xticklabels(timeInHrMin)

但是我如何获取所有显示的tickValues?我需要它们保持自动生成。所以我必须以某种方式只抓取显示的那些(00.511.522.5)并用 xticklabels 重新标记它们。

这可能吗?

【问题讨论】:

    标签: matlab plot matlab-figure


    【解决方案1】:

    是的,有可能。

    您可以按照 Sardar Usama 的建议使用 get(gca,'XTick') 或访问图形的属性 CurrentAxes.XTick 来获取所有显示的刻度值。

    至于重新标记,有一个关于使用xticklabels 的小而重要/烦人的细节。使用它后,不再自动生成刻度。为了解决它,您可以在抓取和修改标签之前使用xtick('auto')

    我还猜测您希望在放大/缩小时刷新刻度。您可以使用zoom 及其回调来完成。

    下面的代码应该让一切都清楚:

    function so
        % meaningless data to have some ticks
        fs = 48000;
        t = 5;
        tvect = 0:1/fs:t-1/fs;
        a = sin(2*pi*tvect);
    
        % plotting data
        fig = figure;
        plot(tvect, a)
    
        % modifying the ticks for the first time after creating the plot
        mypostcallback(fig, struct('Axes', fig.CurrentAxes));
    
        % modifying post zoom callback
        h = zoom(fig);
        h.ActionPostCallback = @mypostcallback;
    end
    
    function mypostcallback(obj,evd)
        % turning on auto generation of ticks after previous usage of xticklabels
        xticks('auto')
        % part where you modify tick labels however you want. 
        % In my case simply adding 10 to the original values.
        xticklabels(evd.Axes.XTick + 10)  
    end
    

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多