在Mathematica中,当我有时候绘制东西时,我并不总是让x轴与绘图的确切底部对齐。有什么方法可以强迫它一直这样做吗?
以下是我所谈论的一个例子:http://i.imgur.com/3lcWd.png
我希望x轴与底部的零刻度标记方式完美对齐,而不是在y轴的中间,就像在该图像中一样。
我能以任何方式完成这项任务吗?
答案 0 :(得分:9)
答案 1 :(得分:5)
以下将在左侧和底部绘制轴,与坐标值无关:
aPlot[f_, var_, opts : OptionsPattern[]] :=
Plot[f, var,
AxesOrigin ->
First /@ (# /. AbsoluteOptions[Plot[f, var, opts], #] &@PlotRange), opts]
aPlot[Evaluate[Table[BesselJ[n, x], {n, 4}]], {x, 0, 10}, Filling -> Axis]
aPlot[Sin[x], {x, 0, 2 Pi}]
答案 2 :(得分:4)
您还可以使用以下内容:Frame -> {{Automatic, None}, {Automatic, None}}
(另外我认为默认情况下不选择{0,0}
意味着y=0
会被PlotRangePadding
带入范围。所以这可能是另一个值得关注的选项。)
答案 3 :(得分:1)
这是基于belisarius代码的(IMO)更优雅的方法,它使用DisplayFunction
选项(参见here关于此选项的有趣讨论):
Plot[Evaluate[Table[BesselJ[n, x], {n, 4}]], {x, 0, 10},
Filling -> Axis,
DisplayFunction ->
Function[{plot},
Show[plot,
AxesOrigin ->
First /@ (PlotRange /. AbsoluteOptions[plot, PlotRange]),
DisplayFunction -> Identity]]]
这两种方法的唯一缺点是AbsoluteOptions
does not always give correct value of PlotRange
。解决方案是使用the Ticks
hack(这会为完整的PlotRange
添加明确的PlotRangePadding
值}:
completePlotRange[plot_] :=
Last@Last@
Reap[Rasterize[
Show[plot, Ticks -> (Sow[{##}] &), DisplayFunction -> Identity],
ImageResolution -> 1]]
Plot[Evaluate[Table[BesselJ[n, x], {n, 4}]], {x, 0, 10},
Filling -> Axis,
DisplayFunction ->
Function[{plot},
Show[plot, AxesOrigin -> First /@ completePlotRange[plot],
DisplayFunction -> Identity]]]
值得注意的是,此代码提供的完全相同,只需指定Frame -> {{Automatic, None}, {Automatic, None}}, Axes -> False
:
pl1 = Plot[Evaluate[Table[BesselJ[n, x], {n, 4}]], {x, 0, 10},
Filling -> Axis,
DisplayFunction ->
Function[{plot},
Show[plot, AxesOrigin -> First /@ completePlotRange[plot],
DisplayFunction -> Identity]]];
pl2 = Plot[Evaluate[Table[BesselJ[n, x], {n, 4}]], {x, 0, 10},
Filling -> Axis, Frame -> {{Automatic, None}, {Automatic, None}},
Axes -> False];
Rasterize[pl1] == Rasterize[pl1]
=> True