บทนำ
ใน 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', '*' |
cmap | Colormap สำหรับ 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) แยกจากกันได้