φυβλαςのβλογ
บล็อกของ phyblas



การเปลี่ยนตัวเลขบอกค่าในกราฟเป็นเลขไทยใน matplotlib
เขียนเมื่อ 2016/06/11 15:24
ในบทความ 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.gca() # สร้างพื้นแกนของกราฟ

# กราฟที่ต้องการวาด (จะเป็นกราฟอะไรก็ได้ เนื้อหาตรงนี้ไม่เกี่ยวข้องกับหัวข้อขอไม่อธิบาย)
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


-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python >> matplotlib

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
python
-- numpy
-- matplotlib

-- pandas
-- pytorch
maya
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
เรียนภาษาจีน
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  ค้นหาบทความ

  บทความแนะนำ

หลักการเขียนทับศัพท์ภาษาจีนกวางตุ้ง
การใช้ unix shell เบื้องต้น ใน linux และ mac
หลักการเขียนทับศัพท์ภาษาจีนกลาง
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
บันทึกการเที่ยวสวีเดน 1-12 พ.ค. 2014
แนะนำองค์การวิจัยและพัฒนาการสำรวจอวกาศญี่ปุ่น (JAXA)
เล่าประสบการณ์ค่ายอบรมวิชาการทางดาราศาสตร์โดยโซวเคนได 10 - 16 พ.ย. 2013
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
บันทึกการเที่ยวญี่ปุ่นครั้งแรกในชีวิต - ทุกอย่างเริ่มต้นที่สนามบินนานาชาติคันไซ
หลักการเขียนทับศัพท์ภาษาญี่ปุ่น
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ
ทำไมถึงอยากมาเรียนต่อนอก
เหตุผลอะไรที่ต้องใช้ภาษาวิบัติ?

ไทย

日本語

中文