我正在为Matlab编写一个绘图自动化程序。但是,我有问题来评估色条的(水平)尺寸。我可以使用以下内容来获取colorbar的大小:
cb = findall(groot,'Type','colorbar'); % get colorbar
xwidth = cb.Position(3);
这将为我提供颜色条的水平尺寸,但排除标签和刻度标签。
您是否知道如何获得条形图和标签的完整尺寸?
提前致谢
在R2014b之前的MATLAB版本中,颜色条只是伪装的axes
对象,因此您可以轻松使用颜色条的OuterPosition
属性来获取颜色条的位置(包括标签和刻度标签)。但是,在R2014b中,colorbar是它自己的图形对象,不再可以访问基础轴。
一种可能的解决方法是在颜色条顶部(具有相同的刻度线和标签)创建一个不可见的axes
对象,并获得其中的OuterPosition
。
function pos = getColorbarPosition(cb)
tmp = axes('Position', cb.Position, 'YAxisLocation', 'right', ...
'YLim', cb.Limits, 'FontSize', cb.FontSize, 'Units', cb.Units, ...
'FontWeight', cb.FontWeight, 'Visible', 'off', ...
'FontName', cb.FontName, 'YTick', cb.Ticks, ...
'YTickLabels', cb.TickLabels, 'XTick', []);
if ~isempty(cb.Label)
ylabel(tmp, cb.Label.String, 'FontSize', cb.Label.FontSize, ...
'FontWeight', cb.Label.FontWeight, 'FontWeight', cb.Label.FontWeight)
end
pos = get(tmp, 'OuterPosition');
delete(tmp);
end
在matlab2017中,colorbar对象有两个重要的大小属性,'Position'和'Label.Extent'
cax = colorbar;
cax.Units = 'centimeters'; % I think this sets the units for the child
cax.Label.String = 'A title';
% The position of the bar itself as [ left bottom width height ]
cpos = cax1.Position;
% The position of the label as [ left bottom width height ]
lpos = cax.Label.Extent;
% The width of the colorbar and label is:
totalwidth = cpos(3) + lpos(3)