我正在尝试为我的每个子图设置 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)
最佳答案
您不能使用 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 = ...
在该工作区中赋值,或在同一函数的任何位置执行赋值。
这是 Matlab 采用“统一访问原则”的工作方式的一个不幸的怪癖:您可以调用不带括号的无参数函数或方法(如 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
当你运行 darnit_gca
,可以看到gca
的分辨率一旦将其用作左值,就会发生变化。
>> darnit_gca
gca is:
built-in (/Applications/MATLAB_R2014b.app/toolbox/matlab/graphics/gca)
now gca is:
gca is a variable.
关于matlab - 在 MATLAB 子图中设置 XTick?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27521566/