跳到正文

用 pgfplots 绘制对数坐标轴

把 axis 换成 semilogyaxis(y 轴对数)、semilogxaxis(x 轴对数)或 loglogaxis(两者都是),或者在普通的 axis 上设置 ymode=log 或 xmode=log。

y 轴上的对数刻度

按倍数增长的数值,例如计数、误差或频率,最适合用对数刻度来看。semilogyaxis 保持 x 轴为线性,把 y 轴变为对数。刻度位于 10 的各次幂处,标为 $10^k$。

对数 y 轴上的指数增长

LaTeX导言区: \usepackage{pgfplots}在编辑器中打开 (在新标签页中打开)
\begin{tikzpicture}
  \begin{semilogyaxis}[xlabel={Day}, ylabel={Cells}, grid=major]
    \addplot coordinates {(0,44) (1,120) (2,350) (3,980) (4,2700) (5,7600) (6,21000)};
  \end{semilogyaxis}
\end{tikzpicture}

在这种图中,一条直线表示每一步都按相同的倍数稳定增长。

两个坐标轴都取对数

loglogaxis 让两个坐标轴都变为对数。像 $y = x^2$ 这样的幂律会变成一条直线,其斜率就是指数。

双对数图上的幂律

LaTeX导言区: \usepackage{pgfplots}在编辑器中打开 (在新标签页中打开)
\begin{tikzpicture}
  \begin{loglogaxis}[xlabel=$n$, ylabel={Time (s)}, legend pos=north west]
    \addplot coordinates {(10,0.001) (100,0.01) (1000,0.1) (10000,1)};
    \addplot coordinates {(10,0.0001) (100,0.01) (1000,1) (10000,100)};
    \legend{$O(n)$, $O(n^2)$}
  \end{loglogaxis}
\end{tikzpicture}
由 Scissor LaTeX 排版: 双对数图上的幂律

用 xmode 和 ymode 实现

xmode=log 和 ymode=log 让普通的 axis 使用对数刻度。当刻度由样式决定,或在组图内部时,这种写法很方便。

普通坐标轴上的 xmode=log

LaTeX导言区: \usepackage{pgfplots}在编辑器中打开 (在新标签页中打开)
\begin{tikzpicture}
  \begin{axis}[xmode=log, xlabel={Frequency (Hz)}, ylabel={Gain (dB)}, ymin=-30, ymax=5]
    \addplot[blue, thick, domain=1:5, samples=60, variable=t]
      ({10^t}, {-10*log10(1 + (10^t/1000)^2)});
  \end{axis}
\end{tikzpicture}
由 Scissor LaTeX 排版: 普通坐标轴上的 xmode=log

公式在对数坐标轴上也能使用,但 domain 和 samples 以数据单位计:采样点在两端之间均匀分布,所以在对数坐标轴上几乎所有点都落在最后一个数量级内。因此这个示例用指数 t 绘制参数曲线,从 $10^1$ 到 $10^5$,让采样点沿对数坐标轴均匀分布。pgfplots 的行为也是如此。

其他对数底

log basis y=2(或 log basis x)更改对数底。此时刻度位于 2 的各次幂处,标为 $2^k$。

y 轴以 2 为底

LaTeX导言区: \usepackage{pgfplots}在编辑器中打开 (在新标签页中打开)
\begin{tikzpicture}
  \begin{semilogyaxis}[log basis y=2, xlabel={Doublings}, ymin=1, ymax=64]
    \addplot coordinates {(0,1) (1,2) (2,4) (3,8) (4,16) (5,32)};
  \end{semilogyaxis}
\end{tikzpicture}

对数坐标轴上的选项

选项在 Scissor LaTeX 中说明
semilogxaxis、semilogyaxis、loglogaxis支持
xmode=log、ymode=log支持
log basis x=b、log basis y=b支持
对数坐标轴上的 ymin、ymax支持请给出正值。
log ticks with fixed point不支持会被忽略并给出提示;标签仍为幂的形式。
对数坐标轴上的 ybar stacked不支持柱子相互覆盖绘制,不会堆叠,也没有提示。
小于或等于 0 的值舍弃无法在对数刻度上显示的点会被略去,并给出一条提示。

与 TeX 发行版的不同之处

线性坐标轴上的柱子请参阅柱状图,所有选项见 pgfplots 手册:ctan.org/pkg/pgfplots。

另请参阅折线图、组图和等高线图和热力图。

常见问题

如何在 pgfplots 中让 y 轴取对数?

用 \begin{semilogyaxis} ... \end{semilogyaxis} 代替 axis,或者在坐标轴选项中加 ymode=log。

为什么我的对数图没有显示数据?

对数坐标轴无法显示零或负值。含有这类值的点会被舍弃,“问题”标签页会说明这一点。请平移数据或使用线性坐标轴。

可以用 2 或 e 作为底吗?

可以,用 log basis y=2(或任意正数,例如 log basis x=2.71828)。

本页的每个示例都在构建网站时由 Scissor LaTeX 排版。 最后更新:2026-11-07