假设我设置了以下函数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
,仍然可以正确缩放垂直轴。谢谢大家的帮助。
答案 0 :(得分: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
函数。
在这种情况下,对于y轴Full
,我更喜欢Automatic
而不是PlotRange
,因为之后您知道它永远不会以隐藏曲线部分的方式裁剪图
答案 1 :(得分: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)]
答案 2 :(得分:3)
看看这是否符合您的要求。我只是使用ListPlot而不是plot。
但是我不确定你在做什么,因为你正在为{0}设置f
c,但是然后将x范围设置为0到0.05?那么为什么不使用f
绘制{c,0,0.05}
?可能是我遗失了一些东西。
无论如何,这就是我所拥有的
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
的采样只发生一次而不是2次?
所以这是第二个版本
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]
)
]