我正在尝试为每个子图设置XTick
。在阅读the MATLAB documentation here之后,我决定采取以下措施,但它无效。
MWE
subplot(2, 1, 1);
gca.XTick = [0, 6, 12, 18, 24];
subplot(2, 1, 2);
gca.XTick = [0, 6, 12, 18, 24];
我的MATLAB版本是
>> version
ans =
8.4.0.150421 (R2014b)
答案 0 :(得分:6)
您不能直接使用gca
,就好像它是赋值操作左侧的句柄引用一样。您可以使用set(gca, ...)
语法或ax = gca; ax.XTick ...
,但前提是您避免使用gca.Whatever = ...
语法,因为标识符阴影,您将在工作区中中断gca
语法
gca.XTick = [0, 6, 12, 18, 24];
不会做你想要的。这不会调用gca()
函数,而是创建一个名为gca
的新局部变量,并使用具有名为XTick
的字段的结构填充它。这不仅不会在绘图中设置刻度,而且新变量会掩盖gca
函数,因此在gca
或者clear
之后对同一工作空间中ax = gca;
ax.XTick = [0, 6, 12, 18, 24];
的后续调用将无效重启完成(他们只会访问本地结构字段)。
使用像这样的临时变量
gca.XTick = ...
只要您尚未在该工作区中完成 set(gca, 'XTick', ...)
作业,应该可以正常工作,或者在同一个函数中的任何地方执行任务。
这是对Matlab如何对“统一访问原则”起作用的一个不幸的怪癖:你可以调用没有括号的无参数函数或方法(如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
解析的内容。
darnit_gca
当您运行gca
时,您可以在将>> darnit_gca
gca is:
built-in (/Applications/MATLAB_R2014b.app/toolbox/matlab/graphics/gca)
now gca is:
gca is a variable.
用作左值时看到{{1}}的分辨率发生变化。
{{1}}