← ทำไมตาถึงอ่านกราฟนี้ได้เร็วกว่า
LEVEL 1 · พื้นฐานที่ใช้ทุกวัน
หมึกที่ไม่ได้บอกอะไร
บทนี้ไขปริศนาข้อที่สองที่ปลูกไว้ตั้งแต่บทที่ 1 — ทำไมสไลด์ที่สวยกว่า กลับสื่อสารได้แย่กว่า
คำตอบไม่ใช่ "เพราะความเรียบง่ายดูดีกว่า" ซึ่งเป็นเรื่องรสนิยม แต่เป็นเรื่องกลไกที่คุณได้มาแล้วตั้งแต่บทที่ 2
7.1 ของตกแต่งไม่ได้อยู่เฉย ๆ มันแย่งช่องทาง
บทที่ 2 บอกว่าสายตามีช่องทางแบบขนานอยู่ไม่กี่ช่อง — สี ขนาด ความเข้ม ทิศทาง และตำแหน่งที่หลุดจากแนว
เงาใต้แท่งใช้ ความเข้ม · เส้นตารางใช้ ตำแหน่ง · กรอบใช้ ทิศทาง · คำอธิบายสัญลักษณ์ใช้ สี
ทุกชิ้นที่คุณเติมเข้าไปเพื่อความสวย จึงไม่ได้แค่ "อยู่เฉย ๆ" มันเข้าไปยืนในช่องทางเดียวกับที่ข้อมูลต้องใช้ และช่องทางพวกนั้นมีจำกัด
ของตกแต่งไม่ได้เป็นกลาง มันเป็นคู่แข่งของข้อมูล บนช่องทางเดียวกัน
7.2 นับหมึกกันตรง ๆ
💡 data-ink ratio — สัดส่วนของหมึกบนหน้าที่แบกข้อมูลจริง เทียบกับหมึกทั้งหมด · แนวคิดนี้มาจาก Edward Tufte ซึ่งเสนอว่ากราฟที่ดีควรดันสัดส่วนนี้ให้สูงที่สุดเท่าที่ยังอ่านรู้เรื่อง · เล่มนี้นับเป็น จำนวนชิ้น แทนปริมาณหมึกจริง เพราะชิ้นคือหน่วยที่สายตาต้องประมวลผล และนับตรวจซ้ำได้
สคริปต์นี้ (dataink.py) นับชิ้นในภาพข้างบนทีละชิ้น ตามที่ตาเห็นจริง
"""นับหมึกในกราฟ — ชิ้นไหนแบกข้อมูล ชิ้นไหนแค่มาอยู่เฉย ๆ"""
# นับจากภาพ FIG 7.1 ในบทนี้ ทีละชิ้นตามที่ตาเห็น
BEFORE = [
("แท่ง 5 อัน", 5, True),
("เส้นตารางแนวนอน", 6, False),
("กรอบรอบกราฟ 4 ด้าน", 4, False),
("เงาใต้แท่ง 5 อัน", 5, False),
("คำอธิบายสัญลักษณ์", 5, False),
("แกนตั้งพร้อมขีด 6 ขีด", 7, False),
("แกนนอน", 1, False),
]
AFTER = [
("แท่ง 5 อัน", 5, True),
("ตัวเลขบนแท่ง", 5, True),
("ป้ายชื่อใต้แท่ง", 5, True),
("เส้นฐานเส้นเดียว", 1, False),
]
def report(name, items):
data = sum(n for _, n, is_data in items if is_data)
total = sum(n for _, n, _ in items)
print(f"=== {name} ===")
for label, n, is_data in items:
tag = "แบกข้อมูล" if is_data else "ไม่แบกข้อมูล"
print(f" {tag:<13}{label:<26} {n:>3}")
print(f" รวม {total} ชิ้น · แบกข้อมูล {data} ชิ้น "
f"· สัดส่วนหมึกที่เป็นข้อมูล {data / total * 100:.1f}%\n")
return data, total
d1, t1 = report("ก่อนแก้", BEFORE)
d2, t2 = report("หลังแก้", AFTER)
print(f"ชิ้นที่ตาต้องประมวลผลลดจาก {t1} เหลือ {t2} ({(1 - t2 / t1) * 100:.0f}% หายไป)")
print(f"แต่ข้อมูลที่สื่อได้เพิ่มจาก {d1} เป็น {d2} ชิ้น")
print("นี่คือจุดที่คำว่า 'เรียบง่ายกว่า' ไม่ได้แปลว่า 'บอกน้อยกว่า'")ผลรันจริง
=== ก่อนแก้ ===
แบกข้อมูล แท่ง 5 อัน 5
ไม่แบกข้อมูล เส้นตารางแนวนอน 6
ไม่แบกข้อมูล กรอบรอบกราฟ 4 ด้าน 4
ไม่แบกข้อมูล เงาใต้แท่ง 5 อัน 5
ไม่แบกข้อมูล คำอธิบายสัญลักษณ์ 5
ไม่แบกข้อมูล แกนตั้งพร้อมขีด 6 ขีด 7
ไม่แบกข้อมูล แกนนอน 1
รวม 33 ชิ้น · แบกข้อมูล 5 ชิ้น · สัดส่วนหมึกที่เป็นข้อมูล 15.2%
=== หลังแก้ ===
แบกข้อมูล แท่ง 5 อัน 5
แบกข้อมูล ตัวเลขบนแท่ง 5
แบกข้อมูล ป้ายชื่อใต้แท่ง 5
ไม่แบกข้อมูล เส้นฐานเส้นเดียว 1
รวม 16 ชิ้น · แบกข้อมูล 15 ชิ้น · สัดส่วนหมึกที่เป็นข้อมูล 93.8%
ชิ้นที่ตาต้องประมวลผลลดจาก 33 เหลือ 16 (52% หายไป)
แต่ข้อมูลที่สื่อได้เพิ่มจาก 5 เป็น 15 ชิ้น
นี่คือจุดที่คำว่า 'เรียบง่ายกว่า' ไม่ได้แปลว่า 'บอกน้อยกว่า'สังเกตบรรทัดสุดท้ายให้ดี ชิ้นลดลงครึ่งหนึ่ง แต่ข้อมูลที่สื่อได้เพิ่มขึ้นสามเท่า เพราะตัวเลขบนแท่งกับป้ายชื่อใต้แท่งนับเป็นข้อมูล ไม่ใช่การตกแต่ง
⚠️ ป้ายในบัญชีคือ "ไม่แบกข้อมูล" ไม่ใช่ "ตกแต่ง" และสองคำนี้ไม่เหมือนกัน — แกนกับขีดบอกสเกลถูกนับเป็นไม่แบกข้อมูล แต่มันเป็นหมึกที่ชอบธรรม ไม่ใช่ขยะ มันหมดความจำเป็นเฉพาะในกรณีนี้ เพราะพอพิมพ์ค่าติดไว้บนแท่งทุกอันแล้ว แกนก็ไม่เหลืองานให้ทำ · ถ้าคุณไม่ได้พิมพ์ค่า แกนคือชิ้นแรกที่ห้ามลบ
7.3 เส้นแบ่งที่ Tufte ไม่ได้ขีดไว้
กฎ "ลบให้มากที่สุด" มีจุดที่มันพัง และเล่มนี้ต้องบอกให้ชัดเพราะกฎนี้ถูกอ้างแบบสุดโต่งบ่อยมาก
สิ่งที่ ลบได้เกือบเสมอ คือชิ้นที่ไม่ได้ตอบคำถามอะไรเลย — เงา ไล่สี กรอบ เส้นตารางที่ถี่เกินจำเป็น ลวดลายพื้นหลัง
สิ่งที่ ห้ามลบ แม้จะดูเหมือนของตกแต่ง คือชิ้นที่ทำหน้าที่บอกบริบท — หน่วยของตัวเลข ช่วงเวลา ที่มาของข้อมูล และเส้นอ้างอิงอย่างค่าเป้าหมายหรือค่าเฉลี่ย พวกนี้กินหมึก แต่มันแบกความหมาย
เส้นแบ่งจริงไม่ใช่ "สวยหรือไม่สวย" แต่คือคำถามเดียว — ถ้าลบชิ้นนี้ออก มีคำถามไหนที่คนอ่านตอบไม่ได้อีกต่อไปหรือเปล่า ถ้าไม่มี ลบได้