ใน Matplotlib ลำดับการวาด (Drawing Order / Z-order) กำหนดว่าออบเจ็กต์ไหนอยู่บนหรือใต้ โดยปกติ Object ที่ Plot ทีหลังจะอยู่ด้านบน หากต้องการให้ Error Bars อยู่ด้านบนสุด (วาดทีหลังสุด) ให้ Plot Error Bars หลังจาก Plot ข้อมูลอื่นๆ เสร็จแล้ว
วิธีการ
เรียก ax.errorbar() หลังจาก Plot เส้น/จุดข้อมูลอื่นๆ ทั้งหมด เนื่องจาก Matplotlib ใช้ Painter's Algorithm (วาดทีหลังทับทีหน้า)
ตัวอย่างโค้ด
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [10, 6]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots()
# 1. Plot เส้นพื้นหลังหลายเส้นก่อน
for i in range(10):
ax.plot(np.random.rand(10), alpha=0.5, linewidth=1, color='gray')
# 2. Plot ข้อมูลหลัก
x = np.arange(10)
y_main = 2 * np.sin(x * 0.5) + 5
ax.plot(x, y_main, 'bo-', linewidth=2.5, markersize=8, label='Main Data', zorder=10)
# 3. Plot Error Bars ทีหลังสุด (อยู่บนสุด)
y_err = 0.3 * np.random.rand(10) + 0.2
ax.errorbar(x, y_main, yerr=y_err,
fmt='ro', # แสดงจุดสีแดงที่ตำแหน่งข้อมูล
ecolor='red', # สี Error Bar
elinewidth=2, # ความหนาเส้น Error Bar
capsize=5, # ขนาด Cap
capthick=2, # ความหนา Cap
label='Error Bars',
zorder=20) # zorder สูงสุด เพื่อความแน่ใจ
ax.set_xlabel('X', fontsize=12)
ax.set_ylabel('Y', fontsize=12)
ax.set_title('Error Bars Rendered Last (Topmost)', fontsize=14)
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()
ผลลัพธ์
Error Bars (สีแดงพร้อม Cap) จะแสดงอยู่ด้านบนสุด ทับเส้นสีเทาและเส้นสีน้ำเงิน ชัดเจนและมองเห็นได้ชัด
เทคนิคเพิ่มเติม: ใช้ zorder ควบคุมลำดับชั้น
# กำหนด zorder โดยตรง (ค่ามาก = อยู่บน) ax.plot(x, y1, zorder=1) # ชั้นล่าง ax.fill_between(x, y1, y2, zorder=2) # ชั้นกลาง ax.errorbar(x, y, yerr=err, zorder=3) # ชั้นบนสุด ax.scatter(x, y, zorder=4) # ชั้นบนสุดมาก (ถ้าต้องการจุดอยู่บน Error Bar)
คำแนะนำ
- วิธีง่ายที่สุด: เรียก
errorbar()ทีหลังสุดในโค้ด - วิธีแน่ใจที่สุด: กำหนด
zorderให้ Error Bar สูงกว่าอื่นๆ fmt='none'ใน errorbar จะซ่อนจุดข้อมูล แสดงเฉพาะ Error Bar- ใช้
capsize=0หากไม่ต้องการ Cap ที่ปลาย Error Bar