φυβλαςのβλογ
phyblasのブログ



การเปลี่ยนตัวเลขบอกค่าในกราฟเป็นเลขไทยใน matplotlib
เขียนเมื่อ 2016/06/11 15:24
แก้ไขล่าสุด 2022/07/21 15:31
ในบทความ 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


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

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

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

หมวดหมู่

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

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

目次

日本による名言集
モジュール
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
機械学習
-- ニューラル
     ネットワーク
ภาษา javascript
ภาษา mongol
言語学
maya
確率論
日本での日記
中国での日記
-- 北京での日記
-- 香港での日記
-- 澳門での日記
台灣での日記
北欧での日記
他の国での日記
qiita
その他の記事

記事の類別



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

  記事を検索

  おすすめの記事

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

ไทย

日本語

中文