我正在MATLAB中创建一个多面板图(具有不同大小的多个轴)。 我希望所有刻度线在所有子图中都具有相同的绝对大小。
根据MATLAB用户指南,刻度线长度是相对于最长轴进行标准化的:
“TickLength。刻度线长度,指定为形式为[2Dlength 3Dlength]的两个元素的向量。[...]以相对于可见x轴、y轴或z轴线中最长的那个轴的单位进行指定。”
为了使所有刻度线长度相同,我正在运行以下代码:
根据MATLAB用户指南,刻度线长度是相对于最长轴进行标准化的:
“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
不幸的是,上述代码并没有生成所有刻度长度相等的图。也许我漏掉了什么?
解决方案。 我的代码出现了两个问题。
首先,我需要从“规范化”单位切换到一些固定单位(例如像素)。请参见下面的答案。
在上面的片段之前的代码中,我调整了图形的大小,并使用
drawnow 更新了它。 但是,MATLAB将在执行图形命令之前到达代码片段,因此报告的大小不正确。 我通过在
drawnow 后放置
pause(0.1)命令来解决该问题。