Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Matplotlib: ตั้งสีขอบจุดใน Scatter Plot (edgecolors)

บทนำ

ใน Matplotlib scatter plot สามารถตั้งสีขอบจุด (border/edge color) ได้ด้วยพารามิเตอร์ edgecolors ใน plt.scatter() หรือ ax.scatter()

ตัวอย่างโค้ด


import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

N = 10
x = np.random.rand(N)
y = np.random.rand(N)

# Scatter plot พร้อมขอบสีแดง
plt.scatter(
    x, y,
    s=500,                    # ขนาดจุด
    c=np.random.rand(N),      # สีเติม (face color)
    edgecolors='red',         # สีขอบ
    linewidth=3               # ความหนาขอบ
)

plt.title("Scatter Plot with Red Edge Colors")
plt.show()

พารามิเตอร์สำคัญของ scatter()

พารามิเตอร์คำอธิบายตัวอย่าง
sขนาดจุด (points^2)500
cสีเติม (face color) - scalar, array, หรือ colormap'red', np.random.rand(N)
edgecolorsสีขอบจุด'red', 'black', 'none', array
linewidth / lwความหนาขอบ1, 2, 3
alphaความโปร่งใส (0-1)0.5, 0.8
markerรูปทรงจุด'o', 's', '^', 'D', '*'
cmapColormap สำหรับ c array'viridis', 'plasma'

ตัวอย่างขั้นสูง

1. Edge color ต่างกันต่อจุด


N = 20
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
edge_colors = np.where(colors > 0.5, 'red', 'blue')  # สีขอบขึ้นกับค่า

plt.scatter(x, y, s=300, c=colors, edgecolors=edge_colors, linewidth=2, cmap='viridis')
plt.colorbar(label='Value')
plt.show()

2. ไม่มีขอบ (edgecolors='none')


plt.scatter(x, y, s=200, c='blue', edgecolors='none')
# หรือ linewidth=0
plt.scatter(x, y, s=200, c='blue', linewidth=0)

3. ใช้กับ ax.scatter() (Object-oriented)


fig, ax = plt.subplots()
ax.scatter(x, y, s=200, c='green', edgecolors='black', linewidth=1.5)
ax.set_facecolor('#f0f0f0')
ax.grid(True, alpha=0.3)

4. Bubble Chart: ขนาด + สี + ขอบ


# ขนาด = population, สี = continent, ขอบ = black
plt.scatter(
    gdp_per_capita, life_expectancy,
    s=population / 1e6,           # ขนาดสัมพันธ์ประชากร
    c=continent_codes,            # สีตามทวีป
    edgecolors='black',           # ขอบดำ
    linewidth=0.5,
    alpha=0.7,
    cmap='tab10'
)

ข้อควรระวัง

  • edgecolors (พหुवचन) - ไม่ใช่ edgecolor (เอกพจน์) แม้ทั้งคู่จะทำงานได้ในบางเวอร์ชัน
  • edgecolors='none' หรือ linewidth=0 เพื่อปิดขอบ
  • สำหรับจุดเล็กมาก (< 20 pt) ขอบอาจไม่มองเห็น ควรเพิ่ม linewidth

สรุป

ใช้ edgecolors='red' (หรือ array) ใน plt.scatter() ตั้งสีขอบจุด ร่วมกับ linewidth ควบคุมความหนา c ควบคุมสีเติม (face color) แยกจากกันได้