在MATLAB子图中设置XTick?

时间:2014-12-17 08:53:27

标签: matlab plot

我正在尝试为每个子图设置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)

1 个答案:

答案 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分配操作的左侧,它应该可以正常工作。

示范

您可以使用whichwhich查看此操作。将代码抛出一个函数,使其获得一个干净的工作区,并使用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}}