【发布时间】:2017-01-15 18:08:33
【问题描述】:
我正在 MATLAB 中创建一个多面板图(具有多个 不同 大小的轴)。我希望所有刻度线在所有子图中都具有相同的绝对大小。
根据MATLAB user guide,刻度长度相对于最长轴进行归一化:
TickLength. 刻度线长度,指定为 [2Dlength 3Dlength] 形式的二元素向量。 [...] 以相对于最长可见 x 轴、y 轴或 z 轴线的标准化单位指定值。
为了使所有刻度的长度相同,我正在运行以下代码:
fixlen = 0.005; % Desired target length
for i = 1:numel(h) % Loop over axes handles
rect = get(h(i),'Position'); % Get the axis position
width = rect(3); % Axis width
height = rect(4); % Axis height
axislen = max([height,width]); % Get longest axis
ticklen = fixlen/axislen; % Fix length
set(h(i),'TickDir','out','TickLength',ticklen*[1 1]);
end
不幸的是,上面的代码没有生成一个所有刻度长度都相等的图形。也许我错过了什么?
解决方案。我的代码中有两个问题。
首先,我需要从
Normalized单位切换到一些固定单位(如像素)。请参阅下面的答案。在代码的某些部分,在上面的 sn-p 之前,我正在调整图形的大小,我有一个
drawnow来更新它。但是,MATLAB 会在图形命令执行之前 到达代码 sn-p,因此报告的大小不正确。我通过在drawnow之后放置pause(0.1)命令解决了这个问题。
【问题讨论】:
-
您的解决方案适用于我,在 MATLAB 2015a (Mac) 上。
标签: matlab matlab-figure axes