在Matlab图中,我将x轴定义为预先累积的数组timeInSec
:
y = data;
x = timeInSec;
plot(x , y);
图中生成的x轴如下所示:
这里的刻度和刻度值(0
,0.5
,1
,1.5
,2
和2.5
)都是自动的 - 由Matlab生成。我很高兴他们。
但现在我想定制更改tick-value标签。类似的东西:
timeInHrMin = datestr(tickValues, 'HH:MM')
xticklabels(timeInHrMin)
但是如何抓住所有显示的tickValues
?我需要它们保持自动生成。因此,我必须以某种方式仅抓取所显示的内容(0
,0.5
,1
,1.5
,2
和2.5
)并重新标记他们与xticklabels
。
这可能吗?
答案 0 :(得分:0)
是的,这是可能的。
您可以按照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