【问题标题】:How to get length of YTickLabels in MATLAB?如何在 MATLAB 中获取 YTickLabels 的长度?
【发布时间】:2015-08-24 22:48:20
【问题描述】:

我有一个 MATLAB 子图。我需要 YLabels 左对齐对齐。为此,我为每个 ylabel 设置 Position 属性。我的问题是子图是以编程方式创建的,因此我不知道将位置设置为什么。

在 MATLAB 中,我想使用最长/最宽的 YTickLabel 作为定位参考点。为此,我想获取每个标签的长度。我可以通过以下方式获得 YTickLabels:

% Set Label format as string
set(gca, 'YTickLabel', num2str(transpose(get(gca, 'YTick'))))
% Get axis YTickLabels
ax = gca;
labels = get(ax, 'YTickLabel');
% Print labels to console
disp(labels)

我想遍历标签并找到最长标签的长度。我尝试将它们作为单元格数组访问,但得到“来自非单元格数组对象错误的单元格内容引用”。当我尝试矩阵索引时,什么也没有打印出来。

有谁知道是否可以获得每个 YTickLabel 值的长度?

有用的信息:

MATLAB R2014b

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    通过“每个单独的 YTickLabel 值的长度”,我了解您希望获得形成每个标签的字符数。

    使用numel 函数非常简单,例如,它会输出单元格中的元素数量。由于labels 存储在一个单元格数组中,我们可以使用花哨的函数cellfunnumel 应用于每个单元格,然后使用cell2mat 转换为数值数组

    简而言之,你可以使用这个:

    LabelLength = cell2mat(cellfun(@(x) numel(x),labels,'uni',0))
    

    这里有一些示例代码来说明:

    clear
    clc
    close all
    
    x = 1:5;
    
    y = rand(size(x));
    
    scatter(x,y,40,'r','filled')
    
    set(gca,'YTick',[1 3 5],'YTickLabel',{'One';'ThisIsThree';'AndFive'})
    grid on
    
    labels = get(gca,'YTickLabel')
    
    LabelLength = cell2mat(cellfun(@(x) numel(x),labels,'uni',0))
    

    和输出:

    LabelLength =
    
         3
        11
         7
    

    你可以用这个等效的for循环替换cellfun

    LabelLength = zeros(numel(labels),1);
    for k = 1:numel(labels)
    
        LabelLength(k) = numel(labels{k});
    
    end
    LabelLength
    

    请注意,作为一种提供很大灵活性的解决方法,您可以将YTickLabels 替换为text 对象,您可以将HorizontalAlignment 属性设置为left 以使文本左对齐.

    希望有帮助!

    【讨论】:

    • 我用我的代码尝试了解决方案并得到以下错误:错误使用 cellfun 输入 #2 应为元胞数组,而是 char。 subplottest 中的错误(第 58 行)LabelLength = cell2mat(cellfun(@(x) numel(x),labels,'uni',0));
    • 您用于生成该错误的确切代码是什么?另外,如果您使用循环怎么办? labels 很可能不是单元数组
    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 2017-09-11
    • 2010-11-15
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2011-04-29
    相关资源
    最近更新 更多