问题在于,虽然
xtick
函数返回所有存在的刻度值(可见和隐藏的刻度),但
xticklabels
函数仅返回可见刻度的标签。我猜测这种行为是因为MATLAB不会给非可见刻度分配任何标签。因此,您的
xtick
向量为:
[-10 -8 -6 -4 -2 0 2 4 6 8 10]
如果您的xticklabels单元数组为:
{'-4'}, {'-2'}, {'0'}, {'2'}, {'4'}, {'6'}, {'8'}, {'10'}
并且,在替换之后:
{' '}, {'-2'}, {' '}, {'2'}, {' '}, {'6'}, {' '}, {'10'}
由于您图片中仅显示了分配给范围为-4到10的刻度线,因此相应显示的标签是单元数组中从第四个元素到最后一个元素。没有被分配标签的刻度线(因为标签比刻度线少)以空单元格表示:
{'2'}, {' '}, {'6'}, {' '}, {'10'}, {empty}, {empty}, {empty}
解决方案:
你有多个解决方案。第一个是删除不在x轴限制范围内的刻度:
figure;
data=randn(1,21);
plot(-10:10,data);
xlim([-5 10])
xticks(-10:2:10);
xt = xticks();
xl = xlim(); xt(xt<xl(1)) = []; xt(xt>xl(2)) = []; xticks(xt);
lbls=xticklabels;
lbls(1:2:end)={' '};
pause(1);
xticklabels(lbls)
结果(1)
另一个解决方案是手动分配标签,将xticks返回的数字转换为字符串值:
figure;
data=randn(1,21);
plot(-10:10,data);
xlim([-5 10])
xticks(-10:2:10);
lbls= arrayfun(@(x) num2str(x), xticks(), 'UniformOutput', false);
lbls(1:2:end)={' '};
pause(1);
xticklabels(lbls)
结果(2)
您会注意到两个解决方案之间的勾选标记不同。这是由于两个向量的偶数/奇数元素不同,因此,不同的元素被替换为空格。
xticklabel
函数只返回可见刻度的标签”。它似乎要复杂一些;请参考我的回答。 - Luis Mendo