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

Столбчатые диаграммы с pgfplots

Добавьте ybar (вертикальные столбцы) или xbar (горизонтальные) к axis pgfplots, назовите категории через symbolic x coords и задайте каждую серию через \addplot с координатами.

Вертикальные столбцы с именованными категориями

ybar у оси превращает каждую серию в столбцы. symbolic x coords перечисляет имена категорий по порядку, а xtick=data ставит по одному делению под каждым столбцом.

Одна серия столбцов

LaTeXПреамбула: \usepackage{pgfplots}Открыть в редакторе (откроется в новой вкладке)
\begin{tikzpicture}
  \begin{axis}[
      ybar, ymin=0,
      symbolic x coords={Mon, Tue, Wed, Thu, Fri},
      xtick=data,
      ylabel={Visitors},
      enlarge x limits=0.15,
    ]
    \addplot coordinates {(Mon,44) (Tue,31) (Wed,38) (Thu,27) (Fri,40)};
  \end{axis}
\end{tikzpicture}

Столбцы начинаются с нуля. Без ymin=0 ось добавляет немного места ниже нуля, поэтому задайте этот параметр, чтобы столбцы стояли на рамке. enlarge x limits добавляет место по бокам, чтобы крайние столбцы не обрезались рамкой.

Сгруппированные столбцы и подписи значений

При нескольких сериях столбцы каждой категории стоят рядом. nodes near coords печатает каждое значение над его столбцом, а bar width задаёт ширину (по умолчанию 10pt).

Две серии со значениями на столбцах

LaTeXПреамбула: \usepackage{pgfplots}Открыть в редакторе (откроется в новой вкладке)
\begin{tikzpicture}
  \begin{axis}[
      ybar, ymin=0, ymax=55, bar width=12pt,
      symbolic x coords={Erika, Hans, John},
      xtick=data, enlarge x limits=0.25,
      nodes near coords,
      ylabel={Points},
      legend style={at={(0.5,-0.12)}, anchor=north, legend columns=2},
    ]
    \addplot coordinates {(Erika,44) (Hans,31) (John,38)};
    \addplot coordinates {(Erika,40) (Hans,36) (John,29)};
    \legend{Round 1, Round 2}
  \end{axis}
\end{tikzpicture}
Свёрстано в Scissor LaTeX: Две серии со значениями на столбцах

ybar=4pt задаёт промежуток между столбцами одной группы (по умолчанию 2pt).

Составные столбцы

ybar stacked ставит серии друг на друга, а не рядом. Второй \addplot начинается там, где кончается первый.

Составные столбцы по кварталам

LaTeXПреамбула: \usepackage{pgfplots}Открыть в редакторе (откроется в новой вкладке)
\begin{tikzpicture}
  \begin{axis}[
      ybar stacked, ymin=0, bar width=16pt,
      symbolic x coords={Q1, Q2, Q3, Q4},
      xtick=data, enlarge x limits=0.2,
      legend pos=north west, ylabel={Sales},
    ]
    \addplot coordinates {(Q1,12) (Q2,18) (Q3,15) (Q4,22)};
    \addplot coordinates {(Q1,6) (Q2,9) (Q3,12) (Q4,10)};
    \legend{Online, In store}
  \end{axis}
\end{tikzpicture}

Горизонтальные столбцы

xbar рисует столбцы слева направо. Поменяйте роли осей: категории идут в symbolic y coords и ytick=data, а каждая координата записывается как (значение, категория).

Горизонтальные столбцы

LaTeXПреамбула: \usepackage{pgfplots}Открыть в редакторе (откроется в новой вкладке)
\begin{tikzpicture}
  \begin{axis}[
      xbar, xmin=0, xmax=50,
      symbolic y coords={Rust, Python, C},
      ytick=data, enlarge y limits=0.3,
      nodes near coords, xlabel={Projects},
      width=8cm, height=5cm,
    ]
    \addplot coordinates {(44,Rust) (31,Python) (12,C)};
  \end{axis}
\end{tikzpicture}

xbar stacked тоже работает.

Числа в роли категорий

Годам и другим числам не нужен symbolic x coords: стройте их как числа и используйте xtick=data. По умолчанию pgfplots пишет 2024 как «2,024»; отключите разделитель тысяч в стиле подписей делений.

Годы на оси x

LaTeXПреамбула: \usepackage{pgfplots}Открыть в редакторе (откроется в новой вкладке)
\begin{tikzpicture}
  \begin{axis}[
      ybar, ymin=0, xtick=data, enlarge x limits=0.25,
      x tick label style={/pgf/number format/1000 sep=},
    ]
    \addplot coordinates {(2023,18) (2024,31) (2025,44)};
  \end{axis}
\end{tikzpicture}

Параметры вкратце

ПараметрЧто делаетВ Scissor LaTeX
ybar, xbarвертикальные или горизонтальные столбцы рядом друг с другомРаботает
ybar=4ptпромежуток между столбцами одной группыРаботает
ybar stacked, xbar stackedстолбцы друг на другеРаботает на линейных осях
bar width=12ptширина каждого столбцаРаботает
bar shift=..сдвиг серии вбокРаботает
nodes near coordsзначение над каждым столбцом (или рядом с ним)Работает
symbolic x coords, symbolic y coordsименованные категорииРаботает, кроме имён, похожих на числа (без подписей делений)
xticklabel style={rotate=45, anchor=east}наклонные имена категорийРаботает
ybar intervalстолбцы, заполняющие промежутки между значениями xЧастично: рисуются как обычные столбцы на значениях x
hist (библиотека statistics)раскладывает значения по интерваламНе поддерживается: игнорируется с сообщением, исходные значения рисуются линией

Чем это отличается от установленного TeX

Все примеры на этой странице компилируются и с pgfplots в установленном TeX. Руководство: ctan.org/pkg/pgfplots.

См. также основы pgfplots, планки погрешностей, данные из CSV и pgfplots.

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

Как сделать столбчатую диаграмму в LaTeX?

Подключите pgfplots и напишите \begin{axis}[ybar, symbolic x coords={A,B,C}, xtick=data] с одним \addplot coordinates {(A,3) (B,5) (C,2)}; на каждую серию.

Как показать значения над столбцами?

Добавьте nodes near coords к параметрам оси. Каждый столбец получит подпись со своим значением.

Как сделать, чтобы столбцы начинались с нуля?

Они уже начинаются с нуля. Задайте ymin=0 для оси (или xmin=0 для xbar), чтобы убрать место под ними.

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