如何在mathematica中显示循环内的图

时间:2011-04-06 22:01:52

标签: wolfram-mathematica

我想知道你是否有很好的方法在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循环中有“按任意键继续...”之类的内容,然后每次按任意随机键时刷新绘图。任何人都可以提供完整的工作代码吗?

3 个答案:

答案 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}]

enter image description here

如果你想将它们全部连成一个图,Show[listOfPlots]是一种方法:

Show[Table[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10}]]

enter image description here

<强>更新

以下是使用DynamicEventHandler的一种简单方法:

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[]]]

enter image description here