Mathematica Manipulate Plot:缩放坐标轴

3

假设我已经设置了以下函数f[a,b,c],我希望在变化ab的同时绘制它。

f[a_,b_,c_]:=a b c Exp[a b]

Manipulate[
Plot
[
f[a,b,c],
{c,0,1},
PlotRange->{{0,0.05},Automatic}
],
{a,0,1},
{b,0,1}
]

当我固定横坐标的视图范围时,是否有可能自动缩放纵坐标?从上面的代码中可以看出,当变化ab时,纵轴确实会自动缩放,就好像我正在查看整个{c,0,1}范围。我希望它仍然处理从0到1的c,但如果我想查看这个图的一个较小的部分,比如从0到0.05的c,仍然可以正确地缩放垂直轴。感谢大家的帮助。


如果能够在Manipulate中添加PlotRange就太好了,但是到目前为止,我还没有找到任何说明这是可能的东西... - CaptanFunkyFresh
3个回答

8
一种类似于Artes Docendo建议的变体:
Manipulate[
 Plot[f[a, b, c], {c, 0, Evaluate@d}, 
  PlotRange -> {{0, Evaluate@d}, Full}], {a, 0., 1.}, {b, 0., 1.}, {d, 
  0.05, 1.}]

注意使用Evaluate,强制将机器精度值输入到Plot函数中,在尝试绘制图形之前。

在这种情况下,我更喜欢使用Full而不是Automatic来设置y轴PlotRange,因为这样就可以确保它不会以隐藏曲线部分的方式裁剪图形。


4

以下是其中一种可能的解决方案:

f[a_, b_, c_] := a b c Exp[a b]
Manipulate[ Plot[f[a, b, c], {c, 0, d}, PlotRange -> Automatic], 
            {a, 0, 1}, {b, 0, 1}, {d, 0.1, 1}, Initialization :> (d := 0.1)]

然而,您的示例并不是很有教育意义。为了更好地了解其工作原理,请尝试类似于这样的内容:
g[a_, b_, c_] := 3 (a - 0.5) Cos[4 Pi (a - c)] Sin[8 Pi (c - 0.5)] Cos[6 Pi (b - c)]

Manipulate[
           Plot[g[a, b, c], {c, 0, d}, PlotRange -> Automatic],
           {a, 0, 1}, {b, 0, 1}, {d, 0.1, 1}, 
           Initialization :> (a := 0.4; b := 0.4; d := 0.5)]

3

看看这个能否满足你的需求。 我只是使用ListPlot而不是plot。

但我不确定你在做什么,因为你正在绘制f从0到1的c,但是然后将x范围设置为仅从0到0.05?为什么不直接使用{c,0,0.05}绘制f呢?也许我漏掉了什么。

无论如何,这就是我拥有的。

 Manipulate[

 xmax = 0.05;
 y = Table[f[a, b, c], {c, 0, xmax, 0.01}];
 max = Max[y];
 min = Min[y];

 Plot[f[a, b, c], {c, 0, 1},
  PlotRange -> {{0, xmax}, {min, max}}, ImagePadding -> 30],

 {a, 0, 1},
 {b, 0, 1},
 Initialization :>
  (
   f[a_, b_, c_] := a b c Exp[a b]
   )

 ]

编辑(1)

我突然想到,为了使上述过程更加高效,可以使用第一个Table命令来生成数据本身,而不仅仅是找到图表范围的最大/最小值。然后使用ListPlot而不是Plot。这样应该会更快,因为对函数f的采样只发生一次,而不是两次?

所以这是第二个版本。

Manipulate[xmax = 0.05;

 data = Table[{c, f[a, b, c]}, {c, 0, xmax, 0.01}];
 max = Max[data[[All, 2]]];
 min = Min[data[[All, 2]]];

 ListPlot[
  data,
  PlotRange -> {Automatic, {min, max}},
  Joined -> True,
  ImagePadding -> 30
  ],

 {a, 0, 1},
 {b, 0, 1},
 Initialization :>
  (
   f[a_, b_, c_] := a b c Exp[a b]
   )
 ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接