Matlab:图例条目的编号模式不一致

时间:2013-07-29 13:30:08

标签: matlab legend printf multiple-entries

我正在使用hold(Ax, 'on')在循环中绘制多条线。要在每次添加新行时管理图例更新,我将我的图例附加为:

reshape(sprintf('Zone #%02d',1:ii), 8, ii)'

其中ii是循环迭代计数器。这会将图例条目生成为Zone #01Zone #02Zone #03等 现在,我想要生成图例条目Zone # 1 and 2 IntersectionZone # 2 and 3 IntersectionZone # 3 and 4 Intersection等,而不是上面的条目。为了得到这种模式,我做了类似reshape(sprintf('Zone # %01d and %01d Intersection', 1:ii, 2:ii + 1), 27, ii)的事情,但它如果ii大于3,则会增加编号模式的一致性,如下所示:

enter image description here

你能发现我哪里出错吗?一如既往地谢谢!

1 个答案:

答案 0 :(得分:2)

是的 - Matlab解释你的语句的方式,它将首先“消耗”整个第一个数组,然后是第二个数组。所以,如果你说

sprintf('%d %d ', 1:5, 2:6)

输出将是

1 2 3 4 5 2 3 4 5 6

事实上,由于你试图做事的方式而且让人感到困惑,你得到了“几乎正确”的一点点。

实现所需目标的正确方法是确保matlab使用变量的顺序是您需要的顺序。这样做的一个例子是

sprintf('%d %d ', [1:3; 2:4])

当matlab访问您创建的数组时

1 2 3
2 3 4

通过下降colums这样做 - 所以它看到了

1 2 2 3 3 4

要生成所需的图例,请使用

reshape(sprintf('Zone # %01d and %01d Intersection', [1:ii; 2:ii + 1]), 27, ii)'

结果是

Zone # 1 and 2 Intersection
Zone # 2 and 3 Intersection
Zone # 3 and 4 Intersection
Zone # 4 and 5 Intersection
Zone # 5 and 6 Intersection

代表ii = 5。注意我转换了reshape的输出来实现这一点(这就是行尾的'