我正在使用hold(Ax, 'on')
在循环中绘制多条线。要在每次添加新行时管理图例更新,我将我的图例附加为:
reshape(sprintf('Zone #%02d',1:ii), 8, ii)'
其中ii
是循环迭代计数器。这会将图例条目生成为Zone #01
,Zone #02
,Zone #03
等
现在,我想要生成图例条目Zone # 1 and 2 Intersection
,Zone # 2 and 3 Intersection
,Zone # 3 and 4 Intersection
等,而不是上面的条目。为了得到这种模式,我做了类似reshape(sprintf('Zone # %01d and %01d Intersection', 1:ii, 2:ii + 1), 27, ii)
的事情,但它如果ii
大于3
,则会增加编号模式的一致性,如下所示:
你能发现我哪里出错吗?一如既往地谢谢!
答案 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
的输出来实现这一点(这就是行尾的'
)