我想知道你是否有很好的方法在mma循环中显示情节。通常,Plot
函数的输出未显示,例如在以下代码中:
For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}]]
感谢您的帮助。
修改
关于我的previous question,我已经有了For循环,例如,像For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}]]
。鉴于这一事实,我希望在For循环中有“按任意键继续...”之类的内容,然后每次按任意随机键时刷新绘图。任何人都可以提供完整的工作代码吗?
答案 0 :(得分:16)
只需使用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]
(此处使用暂停可以给一些时间来查看绘图;这里的循环非常快。如有必要,可以删除)
修改强>
根据要求,由鼠标控制的版本点击图表(按键需要图表具有焦点,因此无论如何都需要点击)
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)}]
]
答案 1 :(得分:13)
只需返回一个图表列表,而不是使用For
循环:
Table[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10}]
如果你想将它们全部连成一个图,Show[listOfPlots]
是一种方法:
Show[Table[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10}]]
<强>更新强>
以下是使用Dynamic
和EventHandler
的一种简单方法:
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]
答案 2 :(得分:5)
如果您真的想让用户在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[]]]