ใช้ Normalize และ ScalarMappable เพื่อแมปค่าตัวเลขเป็นสี RGBA จาก colormap ที่กำหนด เหมาะสำหรับการสร้าง colorbar หรือกำหนดสีให้จุดข้อมูลตามค่า
ขั้นตอนการทำงาน
- สร้างช่วงค่าด้วย
np.linspace - กำหนด normalization ด้วย
colors.Normalize(vmin, vmax) - สร้าง mapper ด้วย
cm.ScalarMappable(norm, cmap) - วนลูปแมปค่าแต่ละค่าเป็น RGBA ด้วย
mapper.to_rgba(value)
ตัวอย่างโค้ด
import numpy as np
from matplotlib import cm, colors
values = np.linspace(1.0, 2.0, 10)
norm = colors.Normalize(vmin=1.0, vmax=2.0, clip=True)
mapper = cm.ScalarMappable(norm=norm, cmap=cm.Greys_r)
for value in values:
rgba = mapper.to_rgba(value)
print(f"{value:.2f} = red:{rgba[0]:.2f} green:{rgba[1]:.2f} blue:{rgba[2]:.2f}")
ผลลัพธ์
1.00 = red:0.00 green:0.00 blue:0.00 1.11 = red:0.13 green:0.13 blue:0.13 1.22 = red:0.28 green:0.28 blue:0.28 1.33 = red:0.41 green:0.41 blue:0.41 1.44 = red:0.53 green:0.53 blue:0.53 1.56 = red:0.66 green:0.66 blue:0.66 1.67 = red:0.78 green:0.78 blue:0.78 1.78 = red:0.87 green:0.87 blue:0.87 1.89 = red:0.95 green:0.95 blue:0.95 2.00 = red:1.00 green:1.00 blue:1.00