用 pgfplots 绘制对数坐标轴
把 axis 换成 semilogyaxis(y 轴对数)、semilogxaxis(x 轴对数)或 loglogaxis(两者都是),或者在普通的 axis 上设置 ymode=log 或 xmode=log。
y 轴上的对数刻度
按倍数增长的数值,例如计数、误差或频率,最适合用对数刻度来看。semilogyaxis 保持 x 轴为线性,把 y 轴变为对数。刻度位于 10 的各次幂处,标为 $10^k$。
对数 y 轴上的指数增长
\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$ 这样的幂律会变成一条直线,其斜率就是指数。
双对数图上的幂律
\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}用 xmode 和 ymode 实现
xmode=log 和 ymode=log 让普通的 axis 使用对数刻度。当刻度由样式决定,或在组图内部时,这种写法很方便。
普通坐标轴上的 xmode=log
\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}公式在对数坐标轴上也能使用,但 domain 和 samples 以数据单位计:采样点在两端之间均匀分布,所以在对数坐标轴上几乎所有点都落在最后一个数量级内。因此这个示例用指数 t 绘制参数曲线,从 $10^1$ 到 $10^5$,让采样点沿对数坐标轴均匀分布。pgfplots 的行为也是如此。
其他对数底
log basis y=2(或 log basis x)更改对数底。此时刻度位于 2 的各次幂处,标为 $2^k$。
y 轴以 2 为底
\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