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

แผนภาพกระจายScatter Plot

ดูว่าสองสิ่งขยับไปด้วยกันไหม

1
พื้นฐานควรรู้ก่อน · อ่านแกน x และ y เป็น
ลองเล่น

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

Scatter plot วางข้อมูลแต่ละแถวเป็นจุดเดียวโดยใช้ตัวแปรหนึ่งเป็นแกนนอนและอีกตัวเป็นแกนตั้ง สิ่งที่อ่านได้ไม่ใช่ค่าของจุดใดจุดหนึ่ง แต่คือ "รูปแบบของกลุ่มจุดทั้งหมด" ซึ่งบอกทิศทาง ความแรง รูปร่าง และจุดที่หลุดออกไปในภาพเดียว

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

เหมือนโปรยเมล็ดถั่วลงบนกระดาษที่มีเส้นกริด ถ้าเมล็ดเรียงเป็นแนวเฉียง แปลว่าสองสิ่งที่วัดมีความเกี่ยวข้องกัน

ใช้ที่ไหนบ้าง — ดูว่างบโฆษณาสัมพันธ์กับยอดขายไหม ขนาดบ้านสัมพันธ์กับราคาไหม หรือหาความสัมพันธ์ก่อนสร้างโมเดล

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

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

ตัวอย่างคลาสสิก · Anscombe’s Quartet — สี่ชุดข้อมูลที่สถิติเหมือนกันแต่หน้าตาคนละเรื่อง

Francis Anscombe สร้างชุดข้อมูลสี่ชุดในปี 1973 ที่มีค่าเฉลี่ย ความแปรปรวน สหสัมพันธ์ และเส้นถดถอยเท่ากันทุกตัว แต่เมื่อวาดเป็น scatter plot กลับพบว่าชุดหนึ่งเป็นเส้นตรง ชุดหนึ่งโค้ง ชุดหนึ่งมีค่าผิดปกติหนึ่งจุด และอีกชุดเป็นเส้นตั้ง นี่คือข้อโต้แย้งที่ทรงพลังที่สุดว่าทำไมต้องวาดกราฟก่อนเชื่อตัวเลขสรุป

Wikipedia · Anscombe’s quartet

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

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

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

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

เมื่อจุดเยอะขึ้น ปัญหาใหม่คือจุดทับกันจนบริเวณที่หนาแน่นดูเหมือนมีข้อมูลน้อย ทางแก้คือลดความทึบของจุด หรือเมื่อเกินไม่กี่พันจุดก็ต้องเปลี่ยนไปใช้ hexbin ที่นับความหนาแน่นให้

เรื่องสีมีข้อจำกัดที่ต้องรู้ เพราะจุดของทุกกลุ่มปนกันอยู่บนพื้นที่เดียว การแยกสีจึงยากกว่ากราฟแท่งมาก ในทางปฏิบัติจำกัดไว้ที่ 3 สี เกินกว่านั้นต้องแยกเป็นกราฟย่อยหลายอัน

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

รูปทรงของข้อมูลตารางแบบยาว (หนึ่งแถวหนึ่งสังเกต)
จำนวนมิติที่เข้ารหัสได้2 มิติถึง 5 มิติถ้าแบ่งเป็นช่องย่อย
จำนวนแถวที่เหมาะ30–2,000 จุดขั้นต่ำ 20 แถว
เส้นฐานศูนย์เลือกได้อ่านจากรูปแบบของกลุ่มจุด ไม่ได้อ่านจากความยาวเทียบฐาน จึงตัดแกนได้ถ้าช่วยให้เห็นรูปแบบ แต่ต้องบอกให้ชัดว่าแกนไม่เริ่มที่ศูนย์

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

คอลัมน์ทำหน้าที่ชนิดเข้ารหัสด้วยจำนวนค่าที่เหมาะหมายเหตุ
xตัวแปรที่คิดว่ามาก่อนตัวเลขต่อเนื่องxต่อเนื่องวางตัวแปรที่เราควบคุมหรือคิดว่าเป็นเหตุไว้แกนนอน
yตัวแปรที่อยากอธิบายตัวเลขต่อเนื่องyต่อเนื่องตัวแปรที่เป็นผลลัพธ์
group
ไม่บังคับ
กลุ่มหมวดหมู่color<= 3 กลุ่ม★ เกิน 3 กลุ่มให้แยกเป็น small multiples เพราะจุดปนกันจนแยกสีไม่ออก

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

  1. ตัดแถวที่ x หรือ y ว่างออก ต้องครบทั้งคู่ถึงจะวาดจุดได้
  2. ตรวจค่าซ้ำที่ทับกันสนิท ถ้ามีมากให้ใส่ jitter เล็กน้อยหรือใช้ opacity
  3. ถ้าหน่วยต่างกันมากจนจุดเกาะขอบ พิจารณา log ทีละแกน

ค่าที่หายไป — ตัดเฉพาะแถวที่ขาด x หรือ y และรายงานจำนวน — ห้ามเติมค่าเฉลี่ยแทน เพราะจะสร้างกระจุกปลอมกลางภาพ

สเกลของแกน — ใช้ linear ทั้งสองแกนเป็นค่าเริ่มต้น ใช้ log เมื่อข้อมูลกินหลาย order of magnitude

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

เกิน 5,000 จุด จะทับกันจนอ่านความหนาแน่นไม่ได้ — เปลี่ยนไปใช้ hexbin-plot หรือ contour-plot

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

x,y,group

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

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

  • ทิศทาง — ขึ้น ลง หรือไม่มีทิศทาง
  • ความแรง — จุดเกาะกันแน่นรอบแนวเส้นหรือกระจายเป็นเมฆ
  • รูปร่าง — เป็นเส้นตรง โค้ง หรือหักที่ค่าหนึ่ง
  • กลุ่มก้อนที่แยกออกจากกัน ซึ่งมักแปลว่ามีกลุ่มย่อยซ่อนอยู่
  • จุดที่หลุดออกไปไกล ซึ่งอาจเป็นข้อผิดพลาดหรือเป็นกรณีที่น่าสนใจที่สุด

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

  • ★ บอกไม่ได้ว่าอะไรเป็นเหตุของอะไร — ความสัมพันธ์ไม่ใช่เหตุและผล นี่คือข้อผิดพลาดที่คนทำบ่อยที่สุดกับกราฟนี้
  • ไม่บอกว่ามีตัวแปรที่สามซ่อนอยู่ที่อธิบายทั้งคู่หรือไม่
  • ไม่บอกความหนาแน่นที่แท้จริงเมื่อจุดทับกัน
  • ไม่บอกลำดับเวลา เว้นแต่จะเปลี่ยนไปใช้ connected-scatter

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

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

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

  • สองตัวแปรนี้เกี่ยวข้องกันไหม
  • ความสัมพันธ์เป็นเส้นตรงหรือโค้ง
  • มีข้อมูลที่ผิดปกติไหม

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

  • จุดเรียงเป็นเส้นตรงเป๊ะเกินไป มักแปลว่าสองคอลัมน์คำนวณมาจากกันเอง
  • จุดเรียงเป็นตารางกริด แปลว่าข้อมูลถูกปัดค่ามาก่อน
  • กลุ่มจุดที่ค่าเดียวกันเป๊ะจำนวนมาก มักเป็นค่า default ที่ระบบเติมให้

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

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

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

  1. วงกลมหรือติดป้ายเฉพาะจุดที่จะพูดถึง อย่าติดป้ายทุกจุด
  2. ถ้าจะใส่เส้นแนวโน้ม ต้องบอกว่าเป็นเส้นแบบไหนและ R² เท่าไร
  3. เขียนหน่วยของทั้งสองแกนให้ชัด
  4. ถ้าตัดแกนไม่เริ่มที่ศูนย์ ให้ระบุไว้ในแกนหรือ caption

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

เมื่อ <x> เพิ่มขึ้น <y> มีแนวโน้ม <เพิ่ม/ลด> — แต่ยังมี <ข้อยกเว้น>

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

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

# ติดตั้ง: pip install "matplotlib==3.10.*" "pandas==2.*"
# ดาวน์โหลด scatter-plot-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("scatter-plot-sample.csv")
df["x"] = pd.to_numeric(df["x"], errors="coerce")
df["y"] = pd.to_numeric(df["y"], errors="coerce")
OPACITY = 0.75   # ← ค่าจาก Playground

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

d = df.dropna(subset=["x", "y"])
for i, (g, sub) in enumerate(d.groupby("group")):
    ax.scatter(sub["x"], sub["y"], s=34, alpha=OPACITY, color=[C1, C2, C3][i % 3],
               edgecolor=SURFACE, linewidth=0.8, label=g)
ax.set_xlabel("ตัวแปรที่คิดว่ามาก่อน (x)"); ax.set_ylabel("ตัวแปรที่อยากอธิบาย (y)")
ax.legend(frameon=False, title="กลุ่ม")
r = d["x"].corr(d["y"])
ax.set_title(f"r = {r:.3f} · ความสัมพันธ์ไม่ใช่เหตุและผล", loc="left", fontsize=10)

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

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

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

ข้อมูลตัวอย่าง · 120 แถว · seed 127● คำนวณใหม่ในเบราว์เซอร์ทันทีที่ปรับค่า
ลดความทึบเมื่อจุดทับกัน
กลุ่มเมืองกลุ่มชานเมืองกลุ่มต่างจังหวัด
20.030.040.050.060.070.080.0ตัวแปรที่อยากอธิบาย (y)0.0010.020.030.040.050.060.0ตัวแปรที่คิดว่ามาก่อน (x)x 20.0 · y 45.0 · กลุ่มเมืองx 13.1 · y 32.1 · กลุ่มชานเมืองx 20.8 · y 39.0 · กลุ่มต่างจังหวัดx 36.4 · y 59.6 · กลุ่มเมืองx 18.7 · y 29.9 · กลุ่มชานเมืองx 28.3 · y 34.9 · กลุ่มต่างจังหวัดx 46.7 · y 62.8 · กลุ่มเมืองx 24.8 · y 48.6 · กลุ่มชานเมืองx 45.9 · y 55.7 · กลุ่มต่างจังหวัดx 24.6 · y 40.1 · กลุ่มเมืองx 22.6 · y 37.5 · กลุ่มชานเมืองx 48.8 · y 54.1 · กลุ่มต่างจังหวัดx 13.2 · y 32.3 · กลุ่มเมืองx 24.9 · y 49.0 · กลุ่มชานเมืองx 57.8 · y 63.1 · กลุ่มต่างจังหวัดx 21.9 · y 39.4 · กลุ่มเมืองx 41.2 · y 65.8 · กลุ่มชานเมืองx 35.1 · y 42.0 · กลุ่มต่างจังหวัดx 10.8 · y 32.6 · กลุ่มเมืองx 13.5 · y 34.5 · กลุ่มชานเมืองx 43.7 · y 50.0 · กลุ่มต่างจังหวัดx 30.3 · y 49.1 · กลุ่มเมืองx 21.3 · y 35.1 · กลุ่มชานเมืองx 43.1 · y 48.7 · กลุ่มต่างจังหวัดx 8.02 · y 21.9 · กลุ่มเมืองx 24.5 · y 45.8 · กลุ่มชานเมืองx 52.6 · y 61.3 · กลุ่มต่างจังหวัดx 24.5 · y 47.8 · กลุ่มเมืองx 22.9 · y 40.9 · กลุ่มชานเมืองx 33.2 · y 41.5 · กลุ่มต่างจังหวัดx 45.5 · y 64.9 · กลุ่มเมืองx 45.7 · y 64.2 · กลุ่มชานเมืองx 30.7 · y 42.8 · กลุ่มต่างจังหวัดx 17.0 · y 34.3 · กลุ่มเมืองx 30.5 · y 44.8 · กลุ่มชานเมืองx 37.2 · y 48.3 · กลุ่มต่างจังหวัดx 23.6 · y 43.0 · กลุ่มเมืองx 36.5 · y 55.4 · กลุ่มชานเมืองx 47.9 · y 61.6 · กลุ่มต่างจังหวัดx 10.4 · y 33.7 · กลุ่มเมืองx 29.6 · y 43.3 · กลุ่มชานเมืองx 45.5 · y 54.9 · กลุ่มต่างจังหวัดx 49.9 · y 73.7 · กลุ่มเมืองx 42.9 · y 58.2 · กลุ่มชานเมืองx 32.6 · y 53.3 · กลุ่มต่างจังหวัดx 45.8 · y 75.0 · กลุ่มเมืองx 12.8 · y 27.8 · กลุ่มชานเมืองx 31.5 · y 43.7 · กลุ่มต่างจังหวัดx 42.9 · y 70.8 · กลุ่มเมืองx 31.2 · y 48.8 · กลุ่มชานเมืองx 25.2 · y 44.0 · กลุ่มต่างจังหวัดx 14.0 · y 32.9 · กลุ่มเมืองx 40.7 · y 55.3 · กลุ่มชานเมืองx 33.3 · y 44.5 · กลุ่มต่างจังหวัดx 21.8 · y 42.3 · กลุ่มเมืองx 29.1 · y 53.2 · กลุ่มชานเมืองx 23.0 · y 37.0 · กลุ่มต่างจังหวัดx 24.1 · y 35.9 · กลุ่มเมืองx 21.9 · y 42.3 · กลุ่มชานเมืองx 36.7 · y 49.9 · กลุ่มต่างจังหวัดx 30.8 · y 54.1 · กลุ่มเมืองx 27.6 · y 41.6 · กลุ่มชานเมืองx 49.4 · y 53.0 · กลุ่มต่างจังหวัดx 30.4 · y 50.9 · กลุ่มเมืองx 52.2 · y 77.7 · กลุ่มชานเมืองx 40.5 · y 53.2 · กลุ่มต่างจังหวัดx 34.6 · y 65.3 · กลุ่มเมืองx 22.8 · y 41.3 · กลุ่มชานเมืองx 25.8 · y 45.4 · กลุ่มต่างจังหวัดx 17.9 · y 42.1 · กลุ่มเมืองx 53.0 · y 68.9 · กลุ่มชานเมืองx 50.4 · y 58.7 · กลุ่มต่างจังหวัดx 37.1 · y 59.1 · กลุ่มเมืองx 27.5 · y 47.0 · กลุ่มชานเมืองx 34.8 · y 47.4 · กลุ่มต่างจังหวัดx 33.3 · y 55.9 · กลุ่มเมืองx 52.6 · y 60.6 · กลุ่มชานเมืองx 43.9 · y 48.3 · กลุ่มต่างจังหวัดx 45.2 · y 73.3 · กลุ่มเมืองx 13.6 · y 26.9 · กลุ่มชานเมืองx 50.0 · y 55.6 · กลุ่มต่างจังหวัดx 18.5 · y 37.2 · กลุ่มเมืองx 19.0 · y 40.9 · กลุ่มชานเมืองx 33.1 · y 45.4 · กลุ่มต่างจังหวัดx 46.1 · y 76.9 · กลุ่มเมืองx 33.8 · y 46.6 · กลุ่มชานเมืองx 57.7 · y 55.1 · กลุ่มต่างจังหวัดx 35.9 · y 55.2 · กลุ่มเมืองx 41.3 · y 54.4 · กลุ่มชานเมืองx 55.5 · y 55.1 · กลุ่มต่างจังหวัดx 38.8 · y 68.9 · กลุ่มเมืองx 22.4 · y 38.1 · กลุ่มชานเมืองx 23.4 · y 25.1 · กลุ่มต่างจังหวัดx 44.5 · y 61.6 · กลุ่มเมืองx 21.0 · y 41.0 · กลุ่มชานเมืองx 53.0 · y 54.3 · กลุ่มต่างจังหวัดx 37.7 · y 65.0 · กลุ่มเมืองx 27.1 · y 46.9 · กลุ่มชานเมืองx 39.0 · y 46.9 · กลุ่มต่างจังหวัดx 25.0 · y 45.3 · กลุ่มเมืองx 47.5 · y 63.8 · กลุ่มชานเมืองx 57.2 · y 66.6 · กลุ่มต่างจังหวัดx 46.9 · y 65.4 · กลุ่มเมืองx 35.9 · y 52.8 · กลุ่มชานเมืองx 21.6 · y 25.1 · กลุ่มต่างจังหวัดx 34.3 · y 55.2 · กลุ่มเมืองx 31.1 · y 46.0 · กลุ่มชานเมืองx 52.2 · y 57.2 · กลุ่มต่างจังหวัดx 47.3 · y 68.2 · กลุ่มเมืองx 25.7 · y 46.4 · กลุ่มชานเมืองx 55.9 · y 73.4 · กลุ่มต่างจังหวัดx 21.1 · y 43.3 · กลุ่มเมืองx 21.7 · y 31.9 · กลุ่มชานเมืองx 18.7 · y 30.0 · กลุ่มต่างจังหวัดx 39.8 · y 60.0 · กลุ่มเมืองx 24.9 · y 41.7 · กลุ่มชานเมืองx 34.1 · y 45.4 · กลุ่มต่างจังหวัดx 32.4 · y 60.8 · กลุ่มเมืองx 35.8 · y 56.4 · กลุ่มชานเมืองx 32.8 · y 45.2 · กลุ่มต่างจังหวัด

ค่า r บอกได้แค่ว่าสองสิ่งขยับไปด้วยกัน ไม่ได้บอกว่าอะไรเป็นเหตุของอะไร

สหสัมพันธ์ (r)0.838
จำนวนจุด120
ทิศทางไปทางเดียวกัน
ดูข้อมูลเป็นตาราง (40 แถว)
แผนภาพกระจาย 120 จุด สหสัมพันธ์ 0.84
xyกลุ่ม
20.045.0กลุ่มเมือง
13.132.1กลุ่มชานเมือง
20.839.0กลุ่มต่างจังหวัด
36.459.6กลุ่มเมือง
18.729.9กลุ่มชานเมือง
28.334.9กลุ่มต่างจังหวัด
46.762.8กลุ่มเมือง
24.848.6กลุ่มชานเมือง
45.955.7กลุ่มต่างจังหวัด
24.640.1กลุ่มเมือง
22.637.5กลุ่มชานเมือง
48.854.1กลุ่มต่างจังหวัด
13.232.3กลุ่มเมือง
24.949.0กลุ่มชานเมือง
57.863.1กลุ่มต่างจังหวัด
21.939.4กลุ่มเมือง
41.265.8กลุ่มชานเมือง
35.142.0กลุ่มต่างจังหวัด
10.832.6กลุ่มเมือง
13.534.5กลุ่มชานเมือง
43.750.0กลุ่มต่างจังหวัด
30.349.1กลุ่มเมือง
21.335.1กลุ่มชานเมือง
43.148.7กลุ่มต่างจังหวัด
8.0221.9กลุ่มเมือง
24.545.8กลุ่มชานเมือง
52.661.3กลุ่มต่างจังหวัด
24.547.8กลุ่มเมือง
22.940.9กลุ่มชานเมือง
33.241.5กลุ่มต่างจังหวัด
45.564.9กลุ่มเมือง
45.764.2กลุ่มชานเมือง
30.742.8กลุ่มต่างจังหวัด
17.034.3กลุ่มเมือง
30.544.8กลุ่มชานเมือง
37.248.3กลุ่มต่างจังหวัด
23.643.0กลุ่มเมือง
36.555.4กลุ่มชานเมือง
47.961.6กลุ่มต่างจังหวัด
10.433.7กลุ่มเมือง

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

  • ความทึบของจุด: ลดความทึบลงแล้วสังเกตว่าบริเวณที่จุดซ้อนกันหลายชั้นจะเข้มขึ้น ทำให้เห็นความหนาแน่นที่จุดทึบเต็มที่กลบไว้

ข้อควรระวัง

  1. ★ ตีความว่าเป็นเหตุและผล ทั้งที่กราฟบอกได้แค่ว่าสองสิ่งขยับไปด้วยกัน
  2. จุดทับกันจนดูเหมือนข้อมูลน้อยกว่าความจริง — แก้ด้วย opacity, jitter หรือเปลี่ยนไป hexbin
  3. ใส่เส้นแนวโน้มเชิงเส้นกับข้อมูลที่ชัดเจนว่าโค้ง
  4. ใช้สีเกิน 3 กลุ่ม ทำให้คนตาบอดสีแยกไม่ออกเลย
  5. ตัดแกนโดยไม่บอก ทำให้ความสัมพันธ์ดูแรงกว่าความจริง

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

  • มีจุดมากกว่า 5,000 จุดใช้แทน: hexbin-plot หรือ contour-plot
  • ตัวแปรหนึ่งเป็นหมวดหมู่ใช้แทน: box-plot หรือ strip-plot
  • ข้อมูลเรียงตามเวลาและลำดับสำคัญใช้แทน: connected-scatter
  • ต้องเทียบมากกว่าสองตัวแปรใช้แทน: scatter-matrix หรือ bubble-chart

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

เทคนิคถัดไป · แผนภาพกระจายพร้อมเส้นแนวโน้ม