Мне интересно, есть ли у вас хорошие способы показать графики внутри цикла в mma. Обычно вывод функции Plot
не отображается, например, в следующем коде:
For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}]]
Спасибо за вашу помощь.
Edit
Мне интересно, есть ли у вас хорошие способы показать графики внутри цикла в mma. Обычно вывод функции Plot
не отображается, например, в следующем коде:
For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}]]
Спасибо за вашу помощь.
Edit
Просто используйте 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)}]
]
Просто верните список графиков вместо использования цикла 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}]]
UPDATE
Здесь один простой способ с использованием 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]
Если вы действительно хотите, чтобы пользователь нажал клавишу между графиками, самым простым способом может быть
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[]]]