我正在尝试使用 pgfplots 绘制麦克斯韦-玻尔兹曼曲线。在网上搜索密度函数后,我得到了以下结果:
\begin{tikzpicture}
\def\kB{1.3806488e-23}% boltzmann constant
\def\temperature{298}% room temperature
\def\Beta{1/(\kB*\temperature)}
\def\amu{1.660538921e-27}% atomar mass unit in kg
\def\mass{1*\amu}
\begin{axis}[
axis lines = left,
domain = 0:6000,
xlabel = $v$,
ylabel = $P(v)$,
xtick = \empty,
ytick = \empty
]
\addplot[color=black]{
sqrt(2/pi)*(\mass*\Beta)^(3/2)*x^2*exp(-.5*\mass*\Beta*x^2)
};
\end{axis}
\end{tikzpicture}
曲线和所有东西都很好,问题是,正如标题所示,曲线的顶部被切断了。我认为这与某种自动缩放有关,因为在通过执行 (数学上)拉伸图形后0.5 * f(x)
,一切似乎都保持不变。
可以看出,曲线的峰值被截断。
全局设置如下:
\pgfplotsset{
compat = 1.13,
samples = 100,
scaled ticks = false,
width = 100mm,
height = 60mm
}
谢谢!
答案1
每当使用非方框轴样式时,都会看到此伪影。如果使用方框图,轴方框线会覆盖此区域,因此看不到剪辑。
除了 corporal 建议的更改之外,您还可以通过添加轴选项来避免每个轴上的裁剪clip=false
。请注意,这可能不适合绘制某些函数,特别是那些不连续性趋向于 ±∞ 的函数。但在这种情况下,它可以很好地防止裁剪而无需调整轴限制。
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{
compat = 1.13,
samples = 100,
}
\def\kB{1.3806488e-23}% boltzmann constant
\def\temperature{298}% room temperature
\def\Beta{1/(\kB*\temperature)}
\def\amu{1.660538921e-27}% atomar mass unit in kg
\def\mass{1*\amu}
\def\mB{\mass*\Beta}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines = left,
domain = 0:6000,
xlabel = $v$,
ylabel = $P(v)$,
xtick = \empty,
ytick = \empty,
clip = false,
]
\addplot[black]{sqrt(2/pi)*(\mB)^(3/2)*x^2*exp(-.5*\mB*x^2)};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
以下是修复该问题的几种可能方法。enlarge y limits={abs=0.4pt},
在轴选项后添加ytick = \empty,
不要忘记 \empty 后面的额外逗号。使用是abs=0.4pt
因为这是图的线宽,所以它会删除顶部的截断或剪辑,但也会在水平轴上添加少量填充。
您可以尝试的另一件事是添加ymax={0.0004},
或甚至ymax={0.00038},
添加到轴选项。这些是通过测试一些不同的ymax
值获得的。