ループ内のプロットをmmaで表示する良い方法があるかどうか疑問に思います。通常、Plot
関数の出力は、たとえば次のコードでは表示されません。
For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}]]
ご協力いただきありがとうございます。
編集
私の 前の質問 に関連して、私はすでにForループを持っています。たとえば、このFor[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}]]
。この事実を踏まえて、Forループ内に「任意のキーを押して続行...」のようなものを作成し、ランダムなキーを押すたびにプロットを更新したいと思います。誰かが完全に機能するコードを与えることができますか?
Print
を使用するだけです:
For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}] // Print]
またはMonitor
:
Monitor[For[i = 1, i <= 10, i++, p = Plot[Sin[i*x], {x, -Pi, Pi}];
Pause[0.5]], p]
(ここでは、プロットを表示する時間を与えるために一時停止が使用されています。ループはここではかなり高速です。必要に応じて削除してください)
[〜#〜]編集[〜#〜]
リクエストに応じて、mouseクリックによって制御されるバージョンがグラフをクリックします(キーを押すとグラフにフォーカスが必要になるため、クリックする必要がありますとにかく)
Monitor[For[i = 1, i <= 10, , p = Plot[Sin[i*x], {x, -Pi, Pi}]],
EventHandler[p, {"MouseDown" :> i++}]]
これは、これを行うためのかなり愚かな方法です。ループはプロットを継続的に再描画します。したがって、わずかに(ただしまだ醜い)バージョンは次のようになります。
s = True;
Monitor[
For[i = 1, i <= 10, ,
If[s,
(* Put main loop body here*)
p = Plot[Sin[i*x], {x, -Pi, Pi}]
(* end of main body *) ;
s = False (* prevents continuous re-evaluating main body *)
]
]
, EventHandler[p, {"MouseDown" :> (i++; s = True)}]
]
For
ループを使用する代わりに、プロットのリストを返すだけです。
Table[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10}]
それらすべてを1つのプロットとして連結する場合は、Show[listOfPlots]
はそれを行う1つの方法です:
Show[Table[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10}]]
[〜#〜]更新[〜#〜]
Dynamic
とEventHandler
を使用する簡単な方法の1つを次に示します。
DynamicModule[{i = 1},
EventHandler[Dynamic[Plot[Sin[i*x], {x, -Pi, Pi}]],
{"KeyDown" :> i++}
]
そして、これがAnimate
で作られたもう少し凝ったインターフェースです。
Animate[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10, 1}, AnimationRunning -> False]
本当にユーザーにプロット間でキーを押してもらいたい場合、最も簡単な方法は次のようになります。
For[i = 1, i <= 10, i++,
If[!ChoiceDialog[Plot[Sin[i*x], {x, -Pi, Pi}],
WindowTitle -> "Plot #" <> ToString[i]
<> ": Press OK or Enter to continue"],
Abort[]]]