กราฟแท่งด้วย pgfplots
เพิ่ม ybar (แท่งแนวตั้ง) หรือ xbar (แท่งแนวนอน) ให้ axis ของ pgfplots ตั้งชื่อหมวดหมู่ด้วย 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}แท่งเริ่มที่ศูนย์ หากไม่มี ymin=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
ตัวอย่างทั้งหมดในหน้านี้คอมไพล์ได้ด้วย 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