Qia*_* Li 13 wolfram-mathematica
我想知道你是否有很好的方法在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循环中有"按任意键继续..."之类的内容,然后每次按任意随机键时刷新绘图.任何人都可以提供完整的工作代码吗?
Sjo*_*ies 17
只需使用Print:
For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}] // Print]
Run Code Online (Sandbox Code Playgroud)
或者Monitor:
Monitor[For[i = 1, i <= 10, i++, p = Plot[Sin[i*x], {x, -Pi, Pi}];
Pause[0.5]], p]
Run Code Online (Sandbox Code Playgroud)
(此处使用Pause可以给一些时间来查看绘图;此处的循环非常快.如有必要,可以删除)
编辑
请求通过鼠标点击图形控制的版本(按键需要图形具有焦点,因此您无论如何都需要点击)
Monitor[For[i = 1, i <= 10, , p = Plot[Sin[i*x], {x, -Pi, Pi}]],
EventHandler[p, {"MouseDown" :> i++}]]
Run Code Online (Sandbox Code Playgroud)
这是一个非常愚蠢的方法来做到这一点.循环连续重绘绘图.所以,一个稍微(但仍然很难看)的版本可能是:
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)}]
]
Run Code Online (Sandbox Code Playgroud)
Mic*_*lat 13
只需返回一个图表列表,而不是使用For循环:
Table[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10}]
Run Code Online (Sandbox Code Playgroud)

如果你想将它们全部连接成一个图,那么这Show[listOfPlots]是一种方法:
Show[Table[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10}]]
Run Code Online (Sandbox Code Playgroud)

UPDATE
这是使用Dynamic和的一种简单方法EventHandler:
DynamicModule[{i = 1},
EventHandler[Dynamic[Plot[Sin[i*x], {x, -Pi, Pi}]],
{"KeyDown" :> i++}
]
Run Code Online (Sandbox Code Playgroud)
这是一个稍微更精致的界面Animate:
Animate[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10, 1}, AnimationRunning -> False]
Run Code Online (Sandbox Code Playgroud)
如果你真的想让用户在Plots之间按一个键,最简单的方法可能就是
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[]]]
Run Code Online (Sandbox Code Playgroud)
