01ภาพรวมของกราฟนี้
Tile grid map แทนแต่ละเขตด้วยช่องขนาดเท่ากันที่วางใกล้ตำแหน่งจริง แก้ปัญหาพื้นที่ครองสายตาแบบเดียวกับ cartogram แต่ผลลัพธ์อ่านง่ายกว่ามากเพราะทุกช่องเป็นสี่เหลี่ยมเท่ากันและใส่ตัวเลขลงในช่องได้
เปรียบเทียบให้เห็นภาพ
เหมือนตารางธาตุที่ตำแหน่งบอกความสัมพันธ์คร่าว ๆ แต่ทุกช่องมีขนาดเท่ากันเพื่อให้อ่านง่าย
ใช้ที่ไหนบ้าง — ผลการเลือกตั้งรายรัฐหรือรายจังหวัด ตัวชี้วัดรายเขตที่ต้องเทียบกันอย่างยุติธรรม หรือแดชบอร์ดที่ต้องใส่ตัวเลขลงในแต่ละเขต
สร้างอย่างไร
- ขั้นที่ 1ออกแบบผังช่องให้ใกล้เคียงตำแหน่งจริงและรักษาเพื่อนบ้าน
- ขั้นที่ 2ใช้ผังเดียวกันทุกครั้งเพื่อให้ผู้อ่านคุ้นเคย
- ขั้นที่ 3ระบายสีตามค่าและใส่ตัวย่อชื่อเขต
- ขั้นที่ 4ใส่ตัวเลขในช่องเมื่อพื้นที่พอ
ตัวอย่างคลาสสิก · Tile grid map ผลการเลือกตั้งรายรัฐของสหรัฐ
NPR และสำนักข่าวอื่นหันมาใช้ผังช่องเท่ากันแทนแผนที่จริงในการรายงานผลเลือกตั้ง เพราะแผนที่จริงทำให้รัฐใหญ่ที่มีคนน้อยครองภาพ ขณะที่รัฐเล็กทางตะวันออกซึ่งมีคะแนนเลือกตั้งมากกลับมองแทบไม่เห็น ผังช่องแก้ทั้งสองปัญหาพร้อมกันและยังใส่จำนวนคะแนนลงในช่องได้
02อธิบายภาษาคนเข้าใจง่าย ๆ
Choropleth และ cartogram อยู่คนละขั้ว อันแรกรักษารูปร่างจริงแต่พื้นที่บิดความสำคัญ อันหลังพื้นที่ถูกต้องแต่รูปร่างบิดจนอ่านยาก
Tile grid map เลือกทางที่สาม คือทิ้งรูปร่างจริงไปเลยแล้วให้ทุกเขตเป็นสี่เหลี่ยมขนาดเท่ากัน โดยวางไว้ใกล้ตำแหน่งจริงพอให้รู้ว่าอยู่ภาคไหน
ผลคือได้ความยุติธรรมแบบ cartogram แต่อ่านง่ายกว่ามาก เพราะสี่เหลี่ยมเท่ากันทุกช่องเทียบสีกันได้ตรงไปตรงมา และที่สำคัญคือใส่ตัวเลขลงในช่องได้ ซึ่งแก้จุดอ่อนใหญ่ที่สุดของแผนที่ระบายสีคือการอ่านค่าไม่ได้
ราคาที่จ่ายคือภูมิศาสตร์หายไปเกือบหมด ระยะทาง รูปร่าง และขนาดพื้นที่ไม่มีความหมายเลย เหลือแค่ความเป็นเพื่อนบ้านคร่าว ๆ
ซึ่งแปลว่ามันใช้ไม่ได้เมื่อคำถามเกี่ยวกับภูมิศาสตร์จริง เช่น อะไรกระจายตามแนวชายฝั่ง แต่ใช้ได้ดีมากเมื่อคำถามคือเขตไหนมีค่าเท่าไรและเทียบกันอย่างไร
03ข้อมูลที่ต้องใช้
คอลัมน์ที่ต้องเตรียม
| คอลัมน์ | ทำหน้าที่ | ชนิด | เข้ารหัสด้วย | จำนวนค่าที่เหมาะ | หมายเหตุ |
|---|---|---|---|---|---|
province | เขตพื้นที่ | เชิงพื้นที่ | shape | 10–60 เขต | ต้องมีผังช่องที่ออกแบบไว้ |
regionไม่บังคับ | ภูมิภาค | หมวดหมู่ | row | 4–8 กลุ่ม | ใช้จัดกลุ่มช่องได้ |
rate | ค่าที่วัด | ตัวเลขต่อเนื่อง | color | ต่อเนื่อง | ใส่เป็นตัวเลขในช่องได้ด้วย |
ต้องเตรียมข้อมูลอย่างไรก่อนวาด
- ★ ออกแบบผังช่องหนึ่งครั้งแล้วใช้ซ้ำทุกภาพ
- ตรวจว่าเขตที่ติดกันจริงยังอยู่ใกล้กันในผัง
- เตรียมตัวย่อชื่อเขตที่สั้นพอใส่ในช่อง
ค่าที่หายไป — เขตที่ไม่มีข้อมูลควรแสดงเป็นช่องว่างที่มีลาย ไม่ใช่ลบช่องออก เพราะการลบทำให้ผังเปลี่ยนและผู้อ่านสับสน
สเกลของแกน — ใช้สเกลสีลำดับเดียว และเมื่อใส่ตัวเลขในช่องต้องตรวจความต่างของสีตัวอักษรกับพื้นหลัง
กราฟจะเริ่มพังเมื่อไร
เกิน 60 เขต ผังช่องออกแบบให้ใกล้ตำแหน่งจริงได้ยาก
หน้าตาไฟล์ที่ต้องเตรียม
province,region,rate
กรุงเทพฯ,เหนือ,26.6
เชียงใหม่,อีสาน,34.7
…04อ่านแล้วเห็นอะไร
สิ่งที่เห็นได้จากภาพ
- เขตที่มีค่าสูงสุดและต่ำสุดโดยเทียบกันอย่างยุติธรรม
- รูปแบบระดับภูมิภาคคร่าว ๆ
- ค่าที่แน่นอนของทุกเขตเมื่อใส่ตัวเลขในช่อง
สิ่งที่กราฟนี้ตอบไม่ได้
- ★ อะไรที่เกี่ยวกับภูมิศาสตร์จริง เพราะระยะทาง รูปร่าง และขนาดถูกทิ้งไปหมด
- รูปแบบที่ขึ้นกับลักษณะภูมิประเทศ เช่น การกระจายตามแนวชายฝั่ง
อ่านตามลำดับนี้
- หาเขตที่สนใจจากตัวย่อในช่อง
- เทียบสีระหว่างช่องได้ตรงไปตรงมาเพราะทุกช่องเท่ากัน
- ดูกลุ่มช่องที่สีคล้ายกันเพื่อหารูปแบบภูมิภาค
คำถามที่ตอบได้
- เขตไหนมีค่าสูงที่สุด
- ค่าของเขตนี้เท่าไร
- ภูมิภาคไหนมีค่าสูงโดยรวม
สัญญาณว่ามีอะไรผิด
- ผังช่องเปลี่ยนไปมาระหว่างภาพ
- เขตที่ติดกันจริงอยู่ห่างกันมากในผัง
- ตัวเลขในช่องอ่านไม่ออกเพราะสีพื้นเข้ม
05เหมาะกับการนำเสนอแบบไหน
ทำอย่างไรให้คนอ่านได้ข้อสรุปโดยไม่ต้องบรรยาย
- ★ ใส่ตัวเลขในช่องเมื่อพื้นที่พอ เพราะนี่คือข้อได้เปรียบหลักเหนือแผนที่จริง
- ใช้ตัวย่อชื่อเขตที่คนคุ้นเคย
- ระบุว่านี่ไม่ใช่แผนที่ตามสัดส่วนจริง
รูปแบบชื่อกราฟที่ควรใช้
<ตัวชี้วัด> รายเขต โดยทุกเขตแสดงด้วยช่องขนาดเท่ากัน
06เอาไปใช้ต่อ
โค้ดทุกชิ้นอ่านไฟล์ tile-grid-map-sample.csv ชุดเดียวกับที่ Playground ใช้ และตัวเลขในโค้ดเปลี่ยนตามค่าที่คุณปรับด้านล่าง
# ติดตั้ง: pip install "matplotlib==3.10.*" "pandas==2.*"
# ดาวน์โหลด tile-grid-map-sample.csv จากหน้านี้ แล้ววางไว้ข้างสคริปต์
import matplotlib
matplotlib.use("Agg") # รันแบบไม่มีหน้าจอ ถ้ารันในเครื่องตัวเองลบบรรทัดนี้ได้
import matplotlib.pyplot as plt
import pandas as pd
C1, C2, C3 = "#2a78d6", "#eb6834", "#1baf7a" # palette ของคลัง เปลี่ยนเป็นสีองค์กรได้
INK, SURFACE = "#0b0b0b", "#fcfcfb"
df = pd.read_csv("tile-grid-map-sample.csv")
df["rate"] = pd.to_numeric(df["rate"], errors="coerce")
NOTE = "equal" # ← ค่าจาก Playground
fig, ax = plt.subplots(figsize=(7.6, 4.2), facecolor=SURFACE)
ax.set_facecolor(SURFACE)
# GRID = {"กรุงเทพ": (4, 2), ...} ผังช่องที่ออกแบบไว้ล่วงหน้า
norm = plt.Normalize(df["rate"].min(), df["rate"].max())
cmap = plt.get_cmap("Blues")
for _, r in df.iterrows():
col, row = GRID[r["province"]]
c = cmap(norm(r["rate"]))
ax.add_patch(plt.Rectangle((col, -row), 0.94, 0.94, facecolor=c, edgecolor="#fcfcfb"))
ax.text(col + 0.47, -row + 0.58, r["province"][:4], ha="center", fontsize=8,
color="#fff" if norm(r["rate"]) > 0.55 else "#22201c")
ax.text(col + 0.47, -row + 0.28, f"{r['rate']:.0f}", ha="center", fontsize=9,
color="#fff" if norm(r["rate"]) > 0.55 else "#22201c") # ใส่ตัวเลขได้ = จุดแข็ง
ax.set_aspect("equal"); ax.autoscale_view(); ax.axis("off")
ax.spines[["top", "right"]].set_visible(False) # ลดเส้นที่ไม่ได้ให้ข้อมูล
fig.tight_layout()
fig.savefig("tile-grid-map.png", dpi=160)
print("เขียน tile-grid-map.png แล้ว ·", len(df), "แถว")07ลองเล่นเพื่อเข้าใจ
ต้องใช้กับอัตราหรือสัดส่วนเท่านั้น ถ้าใช้กับจำนวนดิบ พื้นที่ที่มีประชากรมากจะเข้มเสมอ
ดูข้อมูลเป็นตาราง (12 แถว)
| จังหวัด | ภูมิภาค | ค่า (ต่อประชากรหมื่นคน) |
|---|---|---|
| กรุงเทพฯ | เหนือ | 26.6 |
| เชียงใหม่ | อีสาน | 34.7 |
| ขอนแก่น | กลาง | 32.7 |
| ชลบุรี | ตะวันออก | 34.4 |
| ภูเก็ต | ตะวันตก | 26.8 |
| นครราชสีมา | ใต้ | 18.3 |
| สงขลา | เหนือ | 10.4 |
| อุดรธานี | อีสาน | 23.1 |
| สุราษฎร์ธานี | กลาง | 20.1 |
| พิษณุโลก | ตะวันออก | 17.9 |
| ระยอง | ตะวันตก | 17.4 |
| นครปฐม | ใต้ | 10.5 |
ลองแล้วจะเห็นอะไร
- สังเกตอะไร: เทียบกับหน้า choropleth-map ที่ใช้ข้อมูลชุดเดียวกัน จะเห็นว่าที่นี่ไม่มีเขตไหนครองสายตาเพราะพื้นที่ใหญ่
ข้อควรระวัง
- เปลี่ยนผังช่องไปมาระหว่างภาพ ทำให้ผู้อ่านหาเขตที่คุ้นเคยไม่เจอ
- วางเขตที่ติดกันจริงไว้ห่างกันในผัง ทำให้สัญชาตญาณเชิงพื้นที่ใช้ไม่ได้
- ไม่ใส่ตัวเลขในช่องทั้งที่มีที่พอ ซึ่งเป็นการทิ้งข้อได้เปรียบหลักไป
- ใช้ตอบคำถามที่เกี่ยวกับภูมิศาสตร์จริง
เมื่อไหร่ไม่ควรใช้กราฟนี้
- คำถามเกี่ยวกับภูมิศาสตร์จริง เช่น ระยะทางหรือชายฝั่ง→ใช้แทน: choropleth-map
- ต้องการให้พื้นที่แทนค่า→ใช้แทน: cartogram
- มีเขตมากกว่า 60 เขต→ใช้แทน: horizontal-bar เรียงตามค่า