1

を使用してループ内に複数の行をプロットしています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 Intersectionreshape(sprintf('Zone # %01d and %01d Intersection', 1:ii, 2:ii + 1), 27, ii)ii3

ここに画像の説明を入力

どこが間違っているのか分かりますか? いつもありがとう!

4

1 に答える 1

2

はい - Matlab がステートメントを解釈する方法は、まず最初の配列全体を「消費」し、次に 2 番目の配列を「消費」します。だからあなたが言うなら

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

列を下って行くことによってそうします - それでそれは見ます

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 = 5reshapeこれを実現するためにの出力を転置したことに注意してください(これ'は行末にあります)

于 2013-07-29T13:48:26.830 に答える