เทคนิคที่ 011 · PYTHON / JAVASCRIPT

กราฟแท่งรัศมีRadial Bar Chart

ใช้เมื่อข้อมูลวนเป็นรอบจริง ๆ เท่านั้น

3
ผสานหลายแนวคิดควรรู้ก่อน · อ่านกราฟแท่งเป็น และเข้าใจว่าทำไมการอ่านมุมจึงแม่นน้อยกว่าความยาว
ลองเล่น

01ภาพรวมของกราฟนี้

Radial bar chart เอาแกนหมวดของกราฟแท่งมาดัดเป็นวงกลม แท่งจึงยื่นออกจากศูนย์กลาง ข้อดีคือสื่อความเป็นรอบของข้อมูลได้ตรง ข้อเสียคือแท่งที่อยู่วงนอกมีพื้นที่มากกว่าแท่งวงในที่ค่าเท่ากัน ทำให้อ่านเทียบกันได้ไม่แม่น

เปรียบเทียบให้เห็นภาพ

เหมือนนาฬิกาที่แต่ละชั่วโมงมีเข็มยาวไม่เท่ากันตามปริมาณงาน เราเห็นจังหวะของทั้งวันได้ในภาพเดียว แต่ถ้าจะเทียบว่าชั่วโมง 3 กับชั่วโมง 9 อันไหนมากกว่ากันจะยากกว่าดูแท่งเรียงตรง ๆ

ใช้ที่ไหนบ้าง — ปริมาณการใช้งานรายชั่วโมงในหนึ่งวัน ยอดขายรายเดือนที่ต้องการสื่อว่าวนซ้ำทุกปี หรือทิศทางลม

สร้างอย่างไร

  1. ขั้นที่ 1ตรวจว่าข้อมูลวนเป็นรอบจริง
  2. ขั้นที่ 2กำหนดจุดเริ่มของวงให้มีความหมาย
  3. ขั้นที่ 3วาดแท่งยื่นจากรัศมีชั้นใน
  4. ขั้นที่ 4ติดป้ายรอบวงให้อ่านได้

ตัวอย่างคลาสสิก · Coxcomb ของ Florence Nightingale ปี 1858

Nightingale วาดสาเหตุการเสียชีวิตของทหารอังกฤษในสงครามไครเมียเป็นแผนภาพรัศมี โดยแต่ละกลีบคือหนึ่งเดือน เธอเลือกรูปแบบวงเพราะข้อมูลวนครบสองปีพอดีและเธอต้องการให้เห็นว่าฤดูกาลเกี่ยวข้อง ภาพนี้ช่วยผลักดันการปฏิรูปสุขอนามัยของกองทัพได้จริง

Wikipedia · Florence Nightingale · Polar area diagram

02อธิบายภาษาคนเข้าใจง่าย ๆ

ข้อมูลบางชนิดวนเป็นรอบโดยธรรมชาติ เช่น ชั่วโมงในหนึ่งวัน เดือนในหนึ่งปี หรือทิศทางลม สิ่งเหล่านี้มีคุณสมบัติที่กราฟแท่งตรงสื่อไม่ได้ คือ "ปลายทางเชื่อมกลับไปหาจุดเริ่ม"

ในกราฟแท่งตรง เดือนธันวาคมอยู่ขวาสุดและมกราคมอยู่ซ้ายสุด ดูเหมือนอยู่คนละฟากโลก ทั้งที่จริงมันติดกัน กราฟรัศมีแก้ข้อนี้ได้เพราะธันวาคมกับมกราคมมาอยู่ติดกันจริง ๆ

ราคาที่ต้องจ่ายหนักกว่าที่หลายคนคิด แท่งที่อยู่ไกลจากศูนย์กลางมีเส้นรอบวงยาวกว่า พื้นที่จึงมากกว่าแท่งใกล้ศูนย์กลางที่ค่าเท่ากัน ตาเราอ่านพื้นที่ไปด้วยโดยไม่รู้ตัว ค่าที่เท่ากันจึงดูไม่เท่ากัน

นอกจากนี้ความยาวของแท่งยังวัดจากเส้นโค้ง ไม่ใช่เส้นตรง การเทียบความยาวสองแท่งที่อยู่คนละมุมจึงยากกว่าการเทียบแท่งที่วางเรียงกันบนเส้นฐานเดียวกันอย่างชัดเจน

สรุปคือใช้กราฟนี้ต่อเมื่อความเป็นรอบสำคัญกว่าความแม่นในการอ่านค่า ถ้าคำถามคือ "เดือนไหนมากที่สุด" ให้ใช้แท่งตรง แต่ถ้าคำถามคือ "จังหวะของทั้งรอบเป็นอย่างไร" กราฟรัศมีจะเล่าได้ดีกว่า

03ข้อมูลที่ต้องใช้

รูปทรงของข้อมูลตารางแบบยาว (หนึ่งแถวหนึ่งสังเกต)
จำนวนมิติที่เข้ารหัสได้2 มิติ
จำนวนแถวที่เหมาะ8–16 หมวดขั้นต่ำ 6 แถว
เส้นฐานศูนย์ต้องเริ่มที่ศูนย์ความยาวของแท่งสื่อค่า จึงต้องเริ่มจากรัศมีที่แทนศูนย์เหมือนกันทุกแท่ง

คอลัมน์ที่ต้องเตรียม

คอลัมน์ทำหน้าที่ชนิดเข้ารหัสด้วยจำนวนค่าที่เหมาะหมายเหตุ
categoryหมวดที่วนเป็นรอบมีลำดับangle6–24 หมวดต้องเป็นหมวดที่มีลำดับและวนกลับมาที่จุดเริ่ม ถ้าไม่วนก็ไม่ควรใช้กราฟนี้
valueปริมาณตัวเลขต่อเนื่องlengthบวกเท่านั้นค่าติดลบวาดในรัศมีไม่ได้

ต้องเตรียมข้อมูลอย่างไรก่อนวาด

  1. ตรวจว่าหมวดวนเป็นรอบจริง
  2. เรียงตามลำดับของรอบ ห้ามเรียงตามค่า
  3. กำหนดจุดเริ่มของวงที่มีความหมาย เช่น เที่ยงคืนหรือมกราคม

ค่าที่หายไป — หมวดที่ไม่มีข้อมูลต้องเว้นช่องว่างไว้ในวง ห้ามข้าม เพราะตำแหน่งบนวงคือตัวบอกว่าเป็นหมวดไหน

สเกลของแกน — linear จากรัศมีชั้นในออกไปชั้นนอก และควรเว้นรูตรงกลางไว้ เพราะรัศมีใกล้ศูนย์บีบจนอ่านไม่ได้

กราฟจะเริ่มพังเมื่อไร

น้อยกว่า 6 หมวด วงจะโล่งจนดูไม่เป็นวง และเกิน 24 หมวดแท่งจะบางจนอ่านไม่ออก

หน้าตาไฟล์ที่ต้องเตรียม

category,value

04อ่านแล้วเห็นอะไร

สิ่งที่เห็นได้จากภาพ

  • จังหวะของทั้งรอบ เช่น ช่วงไหนของวันที่คึกคักที่สุด
  • ช่วงที่ต่อเนื่องกันซึ่งเห็นเป็นกลุ่มบนวง
  • หมวดที่โดดออกจากรูปแบบของรอบ
  • ความสมมาตรของรอบ

สิ่งที่กราฟนี้ตอบไม่ได้

  • เทียบค่าระหว่างหมวดที่อยู่คนละมุมได้ไม่แม่น เพราะพื้นที่และความโค้งรบกวน
  • ไม่บอกค่าที่แน่นอนโดยไม่มีตัวเลขกำกับ
  • ไม่รองรับค่าติดลบ

อ่านตามลำดับนี้

  1. หาจุดเริ่มของวงและทิศทางการอ่าน
  2. มองภาพรวมว่าส่วนไหนของวงหนากว่า
  3. ดูตัวเลขกำกับเมื่อจะเทียบค่าจริง
  4. อย่าเทียบความยาวข้ามมุมด้วยสายตาเพียงอย่างเดียว

คำถามที่ตอบได้

  • จังหวะของรอบนี้เป็นอย่างไร
  • ช่วงไหนของรอบที่สูงต่อเนื่องกัน
  • รูปแบบซ้ำเดิมทุกรอบหรือไม่

สัญญาณว่ามีอะไรผิด

  • ใช้กับหมวดที่ไม่ได้วนเป็นรอบ เช่น ชื่อจังหวัด
  • ไม่มีรูตรงกลาง ทำให้แท่งที่ค่าน้อยหายไป
  • ไม่บอกว่าวงเริ่มที่ไหน

05เหมาะกับการนำเสนอแบบไหน

ผู้ชมที่เหมาะผู้ชมทั่วไปที่ต้องการเห็นภาพรวมของรอบ
เวลาที่ผู้ชมต้องใช้ต้องอธิบาย
ขนาดเล็กสุดที่ยังอ่านได้360×360 px
สื่อสารกับคนทั่วไป
สิ่งพิมพ์
สไลด์ผู้บริหาร
รายงานเชิงวิเคราะห์นักวิเคราะห์ต้องการอ่านค่าแม่น ๆ ซึ่งกราฟรัศมีให้ไม่ได้
สำรวจข้อมูลด้วยตัวเองระหว่างสำรวจข้อมูลควรใช้กราฟที่อ่านค่าได้ตรง

ทำอย่างไรให้คนอ่านได้ข้อสรุปโดยไม่ต้องบรรยาย

  1. ติดตัวเลขที่ปลายแท่งทุกแท่ง เพราะอ่านจากรัศมีไม่แม่น
  2. เขียนชัดว่าวงเริ่มที่ไหนและอ่านตามเข็มหรือทวนเข็ม
  3. วาดวงประของค่าอ้างอิงเช่นค่าเฉลี่ย

รูปแบบชื่อกราฟที่ควรใช้

จังหวะของ <รอบ> สูงสุดที่ <หมวด> และต่ำสุดที่ <หมวด>

06เอาไปใช้ต่อ

โค้ดทุกชิ้นอ่านไฟล์ radial-bar-sample.csv ชุดเดียวกับที่ Playground ใช้ และตัวเลขในโค้ดเปลี่ยนตามค่าที่คุณปรับด้านล่าง

# ติดตั้ง: pip install "matplotlib==3.10.*" "pandas==2.*"
# ดาวน์โหลด radial-bar-sample.csv จากหน้านี้ แล้ววางไว้ข้างสคริปต์
import matplotlib
matplotlib.use("Agg")   # รันแบบไม่มีหน้าจอ ถ้ารันในเครื่องตัวเองลบบรรทัดนี้ได้
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

C1, C2, C3 = "#2a78d6", "#eb6834", "#1baf7a"   # palette ของคลัง เปลี่ยนเป็นสีองค์กรได้
INK, SURFACE = "#0b0b0b", "#fcfcfb"

df = pd.read_csv("radial-bar-sample.csv")
df["value"] = pd.to_numeric(df["value"], errors="coerce")
NOTE = "radial"   # ← ค่าจาก Playground

fig, ax = plt.subplots(figsize=(7.6, 4.2), facecolor=SURFACE)
ax.set_facecolor(SURFACE)

fig.clf()
ax = fig.add_subplot(projection="polar")     # ต้องใช้แกนเชิงขั้ว
d = df.head(8)
angles = np.linspace(0, 2 * np.pi, len(d), endpoint=False)
width = 2 * np.pi / len(d) * 0.88
ax.bar(angles, d["value"], width=width, bottom=d["value"].max() * 0.3, color=C1)  # bottom = รูตรงกลาง
ax.set_xticks(angles); ax.set_xticklabels(d["category"], fontsize=8)
ax.set_yticklabels([])
ax.set_title("ปริมาณตามรอบ", loc="left")

ax.spines[["top", "right"]].set_visible(False)   # ลดเส้นที่ไม่ได้ให้ข้อมูล
fig.tight_layout()
fig.savefig("radial-bar.png", dpi=160)
print("เขียน radial-bar.png แล้ว ·", len(df), "แถว")

ติดตั้ง: pip install "matplotlib==3.10.*" "pandas==2.*" · ทดสอบกับเวอร์ชัน 3.10

07ลองเล่นเพื่อเข้าใจ

ข้อมูลตัวอย่าง · 8 แถว · seed 42● คำนวณใหม่ในเบราว์เซอร์ทันทีที่ปรับค่า
ลองเทียบกับหน้ากราฟแท่งธรรมดา
กรุงเทพฯกรุงเทพฯ · 366ชลบุรีชลบุรี · 328ขอนแก่นขอนแก่น · 321เชียงใหมเชียงใหม่ · 319ภูเก็ตภูเก็ต · 283สงขลาสงขลา · 227นครราชสีนครราชสีมา · 208อุดรธานีอุดรธานี · 131

แท่งวงนอกยาวกว่าแท่งวงในที่ค่าเท่ากัน — อ่านค่าเทียบกันไม่แม่นเท่าแท่งตรง

สูงสุดกรุงเทพฯ
จำนวนหมวด8
อัตราส่วนสูงสุด:ต่ำสุด2.79×
ดูข้อมูลเป็นตาราง (8 แถว)
radial bar chart 8 หมวด
หมวดค่า
กรุงเทพฯ366
ชลบุรี328
ขอนแก่น321
เชียงใหม่319
ภูเก็ต283
สงขลา227
นครราชสีมา208
อุดรธานี131

ลองแล้วจะเห็นอะไร

  • เทียบกับกราฟแท่งตรง: เปิดหน้า bar-chart คู่กันแล้วเทียบข้อมูลชุดเดียวกัน จะเห็นว่าแบบรัศมีทำให้จัดอันดับยากขึ้นชัดเจน

ข้อควรระวัง

  1. ใช้กับหมวดที่ไม่ได้วนเป็นรอบ ซึ่งทำให้เสียความแม่นโดยไม่ได้อะไรกลับมา
  2. ไม่เว้นรูตรงกลาง ทำให้แท่งที่ค่าน้อยบีบจนหายไป
  3. เรียงตามค่าแทนที่จะเรียงตามลำดับของรอบ ซึ่งทำลายเหตุผลเดียวที่ใช้กราฟนี้
  4. ไม่ติดตัวเลขกำกับ ทำให้คนอ่านต้องเดาค่าจากรัศมีที่อ่านไม่แม่น

เมื่อไหร่ไม่ควรใช้กราฟนี้

  • หมวดไม่ได้วนเป็นรอบใช้แทน: bar-chart หรือ horizontal-bar
  • ต้องการจัดอันดับให้แม่นใช้แทน: bar-chart
  • ข้อมูลรายชั่วโมงหลายวันใช้แทน: calendar-heatmap หรือ heatmap-matrix

กราฟที่เกี่ยวข้อง

เทคนิคถัดไป · กราฟแท่งพร้อมช่วงความไม่แน่นอน