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进行操作,我会很好,但到目前为止,我还没有发现任何东西可以说明这一点。。。