【问题标题】:Matlab Legend Rejecting Cell Array of Strings for InputMatlab图例拒绝输入的字符串元胞数组
【发布时间】:2015-08-07 19:22:38
【问题描述】:

我有一个我认为是有效的字符串元胞数组 (prn_leg),我想在情节结束时将其作为图例输入。

prn_leg = 

  Columns 1 through 6

'3'    '7'    '8'    '9'    '16'    '19'

  Columns 7 through 10

'23'    '27'    '31'    '32'

但是,当我尝试

legend(prn_leg)

我收到以下警告:

Warning: Error updating Legend.

 Index exceeds matrix dimensions.

> In defaulterrorcallback (line 12)
  In TEC_plotting (line 46) 

并且图中会出现一个空白图例。

我查看了所有解决方案,但似乎没有一个有效。

非常感谢!

汤姆

【问题讨论】:

  • class(prn_leg)legend(prn_leg) 之前调用时返回什么?
  • class(prn_leg)whos prn_leg 都返回它是一个单元格。据我所知,它是一个字符串单元格,每个字符串都在自己的单元格中。如果我按照建议定义输出,我看不出有什么不同:prin_leg = {'3','7',...}; 在我看来是一样的。
  • 这正是我对问题中给定输出的期望。所以@bern 的回答无济于事。

标签: matlab


【解决方案1】:

legend() 函数需要以列分隔的字符串列表或字符串元胞数组,而不是字符串向量。因此,解决此问题的最简单方法是将输入从向量更改为元胞数组,然后图例应该起作用,其中每个元素是:

prin_leg{1} = '3'; prin_leg{2} = '7', etc.

或每 cmets 更有效:

prin_leg = {'3','7',...};

【讨论】:

  • 或者只是prin_leg = {'3', '7', ... }
  • @horchler 是的,效率更高,我将添加到我的答案中,我只是想展示如何访问单元格数组中的元素。
  • 但是 OP 有一个字符串元胞数组,10 列中总共有 16 个字符证明了这一点。还是我错过了什么?
  • 什么是Matlab中的字符串向量?
  • 字符串向量是 OP 呈现的,在 matlab 中为 p = ['3','7',...]
【解决方案2】:

好的,我解决了我的问题。我认为值得在这里发布它,以说明图例或我尝试使用的字符串单元格数组没有问题。

问题是我在一个偶尔包含空单元格的循环中生成了我的情节。我删除了图例单元格数组中的空单元格,但绘图仍然包含空数组——这导致尺寸 (0x1) 与图例 (1x12) 不匹配。我通过添加一个条件来解决这个问题,该条件检查每个循环中的数据数组是否为空,如果不是,则仅绘制它。这导致绘制数据的尺寸为 1xN,然后与 1xN 图例输入兼容。

if ~isempty(Y)
    scatter(X,Y,10,C(pp,:))
    hold on

    prn_leg{pp} = unique(dta.prn{ss}(idx));

end

prn_leg = cellfun(@num2str,prn_leg,'uni',0);
legend(prn_leg)

我希望这对其他人有用。谢谢大家的回复!

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多