ในบทความ
numpy & matplotlib เบื้องต้นบทที่ ๗ ได้พูดถึงการแต่งค่าตัวเลขในกราฟ
และใน
บทที่ ๘ ก็ได้พูดถึงการใส่ภาษาไทยลงไปในกราฟ
จึงเกิดความคิดว่าถ้าจะลองประยุกต์ใช้โดยทำตัวเลขในกราฟให้เป็นภาษาไทยก็อาจจะดูแปลกไปอีกแบบ
ขอเริ่มด้วยการยกตัวอย่างการใช้งาน
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
# สร้างออบเจ็กต์ FontProperties จากมอดูฃย่อย font_manager ซึ่งเป็นตัวเก็บค่าคุณสมบัติต่างๆของตัวอักษร ในที่นี้ตั้งชนิดตัวอักษรและขนาด
fp = mpl.font_manager.FontProperties(family='Tahoma',size=16)
# ฟังก์ชันสำหรับเปลี่ยนเลขฮินดูอารบิกเป็นเลขไทย
def lek_thai(s):
ar = '0123456789'
th = u'๐๑๒๓๔๕๖๗๘๙'
w = ''
for x in str(s):
if(x in ar): x = th[ar.index(x)]
w += x
return w
plt.figure(figsize=(6,6)) # ตั้งขนาดภาพที่จะวางกราฟ
ax = plt.axes() # สร้างพื้นแกนของกราฟ
# กราฟที่ต้องการวาด (จะเป็นกราฟอะไรก็ได้ เนื้อหาตรงนี้ไม่เกี่ยวข้องกับหัวข้อขอไม่อธิบาย)
theta = np.radians(np.linspace(0,360,361))
for i in range(7):
x = (10+np.cos(theta*10)*6)*np.cos(theta+i/10.)*(2+i)/10.
y = (10+np.cos(theta*10)*6)*np.sin(theta+i/10.)*(2+i)/10.
ax.plot(x,y,c='#%d0%d000'%(9-i,i),lw=3)
# แก้ตัวเลขในกราฟเป็นเลขไทย และกำหนดฟอนต์ไปด้วย
ax.set_xticklabels([lek_thai(x) for x in ax.get_xticks()],fontproperties=fp)
ax.set_yticklabels([lek_thai(y) for y in ax.get_yticks()],fontproperties=fp)
plt.show() # แสดงภาพ
ผลที่ได้
ส่วนที่ต้องอธิบายเพิ่มคือตรง set_xticklabels และ set_yticklabels ฟังก์ชันนี้มีไว้สำหรับตั้งค่าตัวเลขที่ปรากฏตามแกนเพื่อบอกค่าของกราฟ
เกี่ยวกับเรื่องนี้อ่านเพิ่มเติมได้ในเนื้อหา numpy & matplotlib เบื้องต้น
บทที่ ๗ ในทางตรงข้าม get_xticks กับ get_yticks เป็นฟังก์ชันสำหรับเอาค่าบนขีดบอกค่าบนแกนกราฟ ฟังก์ชันนี้จะคืนค่าออกมาเป็นลิสต์
จากนั้นเราก็ใช้ for เพื่อทำการวนซ้ำเพื่อสร้างลิสต์ใหม่ขึ้นมา โดยเอาค่าตัวเลขที่ได้จาก get_xticks กับ get_yticks มาเข้าฟังก์ชัน lek_thai เพื่อเปลี่ยนเป็นเลขไทยไปทีละตัว สุดท้ายได้ลิสต์ที่มีแต่เลขไทยออกมาและถูกใส่ลงบนแกนด้วย set_xticklabels และ set_yticklabels
ที่สำคัญคือ set_xticklabels และ set_yticklabels จะต้องใช้หลังจากที่มีการวาดกราฟไปเรียบร้อยแล้ว เพื่อให้ตำแหน่งของเส้นขีดถูกกำหนดโดยอัตโนมัติให้เข้ากับค่าในกราฟไปแล้ว ถ้าใช้ก่อนจะได้ค่าออกมาไม่ตรง
และที่ต้องเน้นอีกอย่างคือรูปแบบของ ฟอนต์ที่ใช้นั้นจะต้องเป็นแบบที่รองรับอักษรไทย ดังนั้นจึงจำเป็นต้องตั้งฟอนต์ด้วยการใส่คีย์เวิร์ด fontproperties
โดยค่าที่ต้องใส่ลงไปคือออบเจ็กต์ FontProperties ซึ่งเก็บค่าคุณสมบัติต่างๆของตัวอักษร ในที่นี้ตั้งเป็น Tahoma ซึ่งเป็นฟอนต์ที่รองรับอักษรไทย
เกี่ยวกับเรื่องนี้อ่านเพิ่มเติมได้ในเนื้อหา
numpy & matplotlib เบื้องต้นบทที่ ๘ ในทางปฏิบัติแล้วคงมีโอกาสน้อยครั้งที่จะมาใช้เลขไทยวาดกราฟในการใช้งานจริงๆ แต่หากทำเพื่อเปลี่ยนบรรยากาศดูบ้างก็อาจจะไม่เลวเหมือนกัน
อ้างอิง http://qiita.com/canard0328/items/a859bffc9c9e11368f37 http://qiita.com/kshigeru/items/0cfc0778bab197687967 http://symfoware.blog68.fc2.com/blog-entry-1417.html