在MATLAB子图中设置XTick?

Sib*_*ing 4 matlab plot

我正在尝试XTick为每个子图设置.在这里阅读了MATLAB文档后,我决定执行以下操作,但它不起作用.

MWE

subplot(2, 1, 1);
gca.XTick = [0, 6, 12, 18, 24];
subplot(2, 1, 2);
gca.XTick = [0, 6, 12, 18, 24];
Run Code Online (Sandbox Code Playgroud)

我的MATLAB版本是

>> version

ans =

8.4.0.150421 (R2014b)
Run Code Online (Sandbox Code Playgroud)

And*_*nke 6

您不能gca直接使用它,就像它是赋值操作左侧的句柄引用一样.您可以使用set(gca, ...)语法或ax = gca; ax.XTick ...,但仅当您避免使用gca.Whatever = ...语法时才会使用该语法,gca由于标识符阴影,语法将在您执行的工作空间中中断.

语法

gca.XTick = [0, 6, 12, 18, 24];
Run Code Online (Sandbox Code Playgroud)

不会做你想要的.这不是调用gca()函数,而是创建一个名为的新局部变量gca,并使用一个具有名为的字段的结构填充它XTick.这不仅不会在图中设置滴答,而且新变量会掩盖该gca函数,因此gca在clear完成或重新启动之后,在同一工作空间中的后续调用将无法工作(它们只会访问本地struct字段) .

使用像这样的临时变量

ax = gca;
ax.XTick = [0, 6, 12, 18, 24];
Run Code Online (Sandbox Code Playgroud)

应该工作,只要你尚未一个gca.XTick = ...在工作空间分配,或做在同一个函数也无济于事.

这是Matlab的采取了"统一访问原则"是如何工作的一个不幸的怪癖,你可以调用argumentless函数或方法不使用括号(像set(gca, 'XTick', ...)),但只有当你不也用同样的标识符作为左值在赋值语句在同一个函数中,这会导致解析器将其识别为局部变量而不是函数调用.

简而言之,不要放在赋值操作gca的左侧=,它应该工作.

示范

您可以使用whos或查看此操作which.将代码抛出一个函数,以便它获得一个干净的工作区,并用于which查看gca解析的内容.

function darnit_gca()

disp('gca is:');
which gca

subplot(2, 1, 1);
gca.XTick = [0, 6, 12, 18, 24];
subplot(2, 1, 2);
gca.XTick = [0, 6, 12, 18, 24];

disp('now gca is:');
which gca
Run Code Online (Sandbox Code Playgroud)

运行时darnit_gca,gca一旦将其用作左值,就可以看到更改的分辨率.

>> darnit_gca
gca is:
built-in (/Applications/MATLAB_R2014b.app/toolbox/matlab/graphics/gca)
now gca is:
gca is a variable.
Run Code Online (Sandbox Code Playgroud)