본문으로 건너뛰기

pgfplots로 막대그래프 그리기

pgfplots axis에 ybar(세로 막대)나 xbar(가로 막대)를 넣고, 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}

막대는 0에서 시작합니다. ymin=0이 없으면 축이 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 intervalx 값 사이 공간을 채우는 막대일부: x 값 위치에 일반 막대로 그림
hist(statistics 라이브러리)값을 구간별로 세기지원하지 않음: 메시지를 남기고 무시하며, 원래 값을 선으로 그림

TeX 설치 환경과 다른 점

이 페이지의 모든 예제는 TeX 설치 환경의 pgfplots로도 컴파일됩니다. 설명서: 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를 넣으세요. 막대마다 값이 레이블로 붙습니다.

막대가 0에서 시작하게 하려면 어떻게 하나요?

막대는 이미 0에서 시작합니다. 아래쪽 여백을 없애려면 축에 ymin=0(xbar라면 xmin=0)을 지정하세요.

이 페이지의 모든 예제는 사이트를 빌드할 때 Scissor LaTeX로 조판됩니다. 마지막 업데이트: 2026-11-07