Przejdź do treści

Wykresy słupkowe w pgfplots

Dodaj ybar (słupki pionowe) lub xbar (słupki poziome) do axis w pgfplots, nazwij kategorie za pomocą symbolic x coords i podaj każdą serię jako \addplot ze współrzędnymi.

Słupki pionowe z nazwanymi kategoriami

ybar w osi zamienia każdą serię w słupki. symbolic x coords wymienia nazwy kategorii po kolei, a xtick=data umieszcza po jednej kresce pod każdym słupkiem.

Jedna seria słupków

LaTeXPreambuła: \usepackage{pgfplots}Otwórz w edytorze (otwiera się w nowej karcie)
\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}

Słupki zaczynają się od zera. Bez ymin=0 oś dodaje trochę miejsca poniżej zera, więc ustaw tę opcję, aby słupki stały na ramce. enlarge x limits dodaje miejsce po bokach, dzięki czemu ramka nie przycina skrajnych słupków.

Słupki grupowane i etykiety wartości

Przy kilku seriach słupki każdej kategorii stoją obok siebie. nodes near coords wypisuje każdą wartość nad jej słupkiem, a bar width ustawia szerokość (domyślnie 10pt).

Dwie serie z wartościami na słupkach

LaTeXPreambuła: \usepackage{pgfplots}Otwórz w edytorze (otwiera się w nowej karcie)
\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}
Złożone przez Scissor LaTeX: Dwie serie z wartościami na słupkach

ybar=4pt ustawia odstęp między słupkami jednej grupy (domyślnie 2pt).

Słupki skumulowane

ybar stacked układa serie jedna na drugiej zamiast obok siebie. Drugi \addplot zaczyna się tam, gdzie kończy się pierwszy.

Słupki skumulowane według kwartałów

LaTeXPreambuła: \usepackage{pgfplots}Otwórz w edytorze (otwiera się w nowej karcie)
\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}

Słupki poziome

xbar rysuje słupki od lewej do prawej. Zamień role osi: kategorie trafiają do symbolic y coords i ytick=data, a każdą współrzędną zapisuje się jako (wartość, kategoria).

Słupki poziome

LaTeXPreambuła: \usepackage{pgfplots}Otwórz w edytorze (otwiera się w nowej karcie)
\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 również działa.

Liczby jako kategorie

Lata i inne liczby nie potrzebują symbolic x coords: narysuj je jako liczby i użyj xtick=data. pgfplots domyślnie zapisuje 2024 jako „2,024”; wyłącz separator tysięcy w stylu etykiet kresek.

Lata na osi x

LaTeXPreambuła: \usepackage{pgfplots}Otwórz w edytorze (otwiera się w nowej karcie)
\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}

Opcje w skrócie

OpcjaCo robiW Scissor LaTeX
ybar, xbarsłupki pionowe lub poziome, obok siebieDziała
ybar=4ptodstęp między słupkami jednej grupyDziała
ybar stacked, xbar stackedsłupki jeden na drugimDziała na osiach liniowych
bar width=12ptszerokość każdego słupkaDziała
bar shift=..przesuwa serię w bokDziała
nodes near coordswartość nad każdym słupkiem (lub obok niego)Działa
symbolic x coords, symbolic y coordsnazwane kategorieDziała, z wyjątkiem nazw wyglądających jak liczby (brak etykiet kresek)
xticklabel style={rotate=45, anchor=east}pochylone nazwy kategoriiDziała
ybar intervalsłupki wypełniające przestrzeń między wartościami xCzęściowo: rysowane jako zwykłe słupki w wartościach x
hist (biblioteka statistics)zlicza wartości w przedziałachNieobsługiwane: pomijane z komunikatem, surowe wartości są rysowane jako linia

Czym różni się od instalacji TeX

Wszystkie przykłady na tej stronie kompilują się także z pgfplots w instalacji TeX. Dokumentacja: ctan.org/pkg/pgfplots.

Zobacz też podstawy pgfplots, Słupki błędów, Dane z CSV i pgfplots.

Pytania i odpowiedzi

Jak zrobić wykres słupkowy w LaTeX?

Załaduj pgfplots i napisz \begin{axis}[ybar, symbolic x coords={A,B,C}, xtick=data] z jednym \addplot coordinates {(A,3) (B,5) (C,2)}; na każdą serię.

Jak pokazać wartości nad słupkami?

Dodaj nodes near coords do opcji osi. Każdy słupek dostaje swoją wartość jako etykietę.

Jak sprawić, by słupki zaczynały się od zera?

One już zaczynają się od zera. Ustaw ymin=0 w osi (lub xmin=0 dla xbar), aby usunąć miejsce pod nimi.

Każdy przykład na tej stronie jest składany przez Scissor LaTeX podczas budowania witryny. Ostatnia aktualizacja: 2026-11-07.