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

การ Rasterize Plot ให้คมชัด ไม่ทำให้ Label คลุมเครือใน Matplotlib

ขั้นตอนการทำงาน

  • กำหนดขนาดรูปภาพและปรับระยะห่างรอบๆ subplots

  • สร้าง Figure และชุด Subplots 4 แถว

  • Axes 0: Fill Between พร้อม Alpha และ rasterized=False

  • เพิ่ม Text ลงใน Axes

  • Axes 1: Fill Between พร้อม Alpha และ rasterized=True

  • เพิ่ม Text ลงใน Axes

  • Axes 2 และ 3: Fill Between โดยไม่มี Alpha, rasterized=True/False ตามลำดับ

  • เพิ่ม Text ลงใน Axes

  • แสดงรูปภาพด้วยเมธอด show()

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

import matplotlib.pyplot as plt
import numpy as np

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

fig, axes = plt.subplots(nrows=4, sharex=True)

# Rasterized=False, มี Alpha
axes[0].fill_between(np.arange(1, 10), 1, 2, zorder=-1, alpha=0.2, rasterized=False)
axes[0].text(5, 1.5, "Label 1", ha='center', va='center', fontsize=25, zorder=-2, rasterized=True)

# Rasterized=True, มี Alpha
axes[1].fill_between(np.arange(1, 10), 1, 2, zorder=-1, alpha=0.2, rasterized=True)
axes[1].text(5, 1.5, "Label 2", ha='center', va='center', fontsize=25, zorder=-2, rasterized=True)

# Rasterized=True, ไม่มี Alpha
axes[2].fill_between(np.arange(1, 10), 1, 2, zorder=-1, rasterized=True)
axes[2].text(5, 1.5, "Label 3", ha='center', va='center', fontsize=25, zorder=-2, rasterized=True)

# Rasterized=False, ไม่มี Alpha
axes[3].fill_between(np.arange(1, 10), 1, 2, zorder=-1, rasterized=False)
axes[3].text(5, 1.5, "Label 4", ha='center', va='center', fontsize=25, zorder=-2, rasterized=True)

plt.show()

ผลลัพธ์และสังเกต

เมื่อใช้ Alpha (ความโปร่งใส) ร่วมกับ Rasterized=True ข้อความ (Label) อาจกลายเป็น Raster image ตาม ทำให้ขอบตัวอักษรไม่คม (Blurry)

แนวทางแก้: ตั้ง rasterized=False สำหรับ Text/Label หรือใช้ zorder ให้ Text อยู่เหนือ Layer ที่ Rasterized

สังเกต: Axes 2 และ 3 ไม่มี Alpha → Label มองเห็นชัด (ไม่มีปัญหา Blur)