Перейти к содержанию

Логарифмические оси с pgfplots

Замените axis на semilogyaxis (логарифмическая y), semilogxaxis (логарифмическая x) или loglogaxis (обе) либо задайте ymode=log или xmode=log у обычной axis.

Логарифмическая шкала по оси y

Величины, которые растут в разы, например количества, ошибки или частоты, лучше всего читаются на логарифмической шкале. semilogyaxis оставляет x линейной и делает y логарифмической. Деления стоят на степенях десяти и подписаны как $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$ превращается в прямую, наклон которой равен показателю степени.

Степенные законы на графике log-log

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: Степенные законы на графике log-log

То же через 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^k$.

Основание 2 по оси y

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.

См. также линейные графики, группы графиков и контурные графики и тепловые карты.

Вопросы и ответы

Как сделать ось y логарифмической в pgfplots?

Используйте \begin{semilogyaxis} ... \end{semilogyaxis} вместо axis или добавьте ymode=log к параметрам оси.

Почему мой логарифмический график не показывает данных?

Логарифмическая ось не может показать ноль или отрицательные значения. Точки с такими значениями отбрасываются, и вкладка «Проблемы» об этом сообщает. Сдвиньте данные или используйте линейную ось.

Можно ли использовать основание 2 или e?

Да, через log basis y=2 (или любое положительное число, например log basis x=2.71828).

Каждый пример на этой странице верстается в Scissor LaTeX при сборке сайта. Обновлено 2026-11-07.