pgfplots로 막대그래프 그리기
pgfplots axis에 ybar(세로 막대)나 xbar(가로 막대)를 넣고, symbolic x coords로 범주 이름을 정한 다음, 계열마다 좌표가 담긴 \addplot을 쓰세요.
이름 붙은 범주의 세로 막대
축에 ybar를 넣으면 모든 계열이 막대가 됩니다. symbolic x coords는 범주 이름을 순서대로 나열하고, xtick=data는 막대마다 눈금을 하나씩 둡니다.
막대 계열 하나
\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)를 정합니다.
막대 위에 값을 표시한 두 계열
\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}ybar=4pt는 한 묶음 안의 막대 사이 간격(기본값 2pt)을 정합니다.
누적 막대
ybar stacked는 계열을 나란히 두는 대신 위로 쌓습니다. 두 번째 \addplot은 첫 번째가 끝나는 곳에서 시작합니다.
분기별 누적 막대
\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에 넣고, 각 좌표는 (값, 범주)로 씁니다.
가로 막대
\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축의 연도
\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 설치 환경과 다른 점
이 페이지의 모든 예제는 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