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

Wolfram mathematica 如何在mathematica中显示循环内的绘图,wolfram-mathematica,Wolfram Mathematica,我想知道你们是否有好的方法来显示mma中循环内的图。通常,绘图功能的输出不显示,例如在以下代码中: 对于[i=1,i只返回一个绘图列表,而不是使用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}]] 更新 下面是一种使用动态和事件处理程序的简单方法

我想知道你们是否有好的方法来显示mma中循环内的图。通常,
绘图
功能的输出不显示,例如在以下代码中:


对于[i=1,i只返回一个绘图列表,而不是使用
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}]]

更新

下面是一种使用
动态
事件处理程序
的简单方法:

DynamicModule[{i = 1},
 EventHandler[Dynamic[Plot[Sin[i*x], {x, -Pi, Pi}]],
  {"KeyDown" :> i++}
  ]
这里有一个更为别致的界面,由
动画制作而成:

Animate[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10, 1}, AnimationRunning -> False]

只需使用
打印

For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}] // Print]
(此处使用“暂停”以留出一些时间查看绘图;此处的循环速度非常快。如有必要,请删除)

编辑
根据要求,可通过鼠标单击图形来控制版本(按键需要图形具有焦点,因此您仍然需要单击)

Monitor[For[i=1,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)}]
 ]
s=True;
监视器[
对于[i=1,i(i++;s=True)}]
]

如果您真的想让用户在绘图之间按键,最简单的方法可能是

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[]]]
对于[i=1,i“Plot#”到字符串[i]
“:按“确定”或“回车”继续”],
中止[]]

谢谢你的回答。我已经编辑了我的文章,希望这次更清楚。我在编辑中添加了一个例子。也不要害怕使用内置的工具来做这类事情,比如
动画
操纵
@Sjoerd C。德弗里斯:谢谢。这确实会绘图,但会生成很多绘图。理想情况下,我希望在按下任意键后刷新绘图。你知道如何达到这个效果吗?我回答后,你改变了你的问题。你还想把它放在For循环中吗?与此同时,Michael已经提供了一个没有答案的答案。@Sjoerd C.de Vries:是的,我仍然希望它在For循环中。@Sjoerd:要让它与键盘事件一起工作是很棘手的,因为笔记本的焦点会移离绘图。尝试将其与NotebookMove[]结合使用会遇到无法实际显示绘图的问题。我唯一能解决这个问题的方法是使用显式(单元格)打印和单元格删除命令…@Simon您也可以使用
PrintTemporary
,它的作用类似于
print
,但返回一个
NotebookInterfaceObject
,您可以在相同的计算中传递到
NotebookDelete
,删除单元格。无需使用
选择移动
。它是否必须是按键,并且只能向前移动?总是有。@Jefromi:是的,理想情况下我想按键。我一直按OK按钮,什么也没发生。顺便说一句,取消按钮也不起作用。这是你程序上的一个bug,还是只是Mozilla兼容性问题?@belisarius:你让我去了一会儿…:PSimon,祝贺你打破3K rep.@Mr.Wizard:谢谢!不过你很快就赶上了。。。你是这个月排名前2%的人。
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[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[]]]