Wolfram mathematica Mathematica操纵绘图:缩放轴

Wolfram mathematica Mathematica操纵绘图:缩放轴,wolfram-mathematica,plot,axes,Wolfram Mathematica,Plot,Axes,假设我已经设置了以下函数f[a,b,c],我希望在改变a和b 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} ] 当我确定横坐标观察范围时,是否可以自动缩放纵坐标?通过上面的代码,您会注意到,当改变a和b时,纵坐标会自动缩放,就像我在查看{c,0,1}的整个范围一样。我希望它仍能处理从0到1的c,但如

假设我已经设置了以下函数
f[a,b,c]
,我希望在改变
a
b

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

当我确定横坐标观察范围时,是否可以自动缩放纵坐标?通过上面的代码,您会注意到,当改变
a
b
时,纵坐标会自动缩放,就像我在查看
{c,0,1}
的整个范围一样。我希望它仍能处理从0到1的
c
,但如果我想查看此绘图的较小部分,例如从0到0.05的
c
,仍能正确缩放垂直轴。谢谢大家的帮助。

以下是许多可能的解决方案之一:

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

看看这是否符合你的要求。我只是使用ListPlot而不是plot

但是我不确定你在做什么,因为你正在为c从0到1绘制
f
,但是然后将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命令来生成数据本身,而不仅仅是找到绘图范围的max/min。然后使用
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]
   )
 ]

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
函数中,然后再实际尝试绘制某些内容


对于y轴
PlotRange
这样的情况,我更喜欢
Full
而不是
Automatic
,因为这样你就知道它永远不会以隐藏部分曲线的方式裁剪绘图。

如果有办法添加PlotRange进行操作,我会很好,但到目前为止,我还没有发现任何东西可以说明这一点。。。