ข้ามไปที่เนื้อหาหลัก

ทดลองวาดกราฟด้วย mathplotlib

หลังจากที่เริ่มเขียนรายงาน มีผลการทดสอบหลายตัวที่ต้องการนำเสนอในรูปของกราฟ ซึ่งข้อมูลที่ได้จากต้นทางเป็นผลลัพธ์ของโปรแกรมที่ผมทดสอบนั้นเอง แต่ในแต่ละการทดสอบจะวัดผลกันที่เวลาที่ใช้สำหรับประมวลผลของแต่ละกระบวนการ การจะให้ทดสอบแค่ครั้งเดียวอาจได้ผลที่ไม่แม่นยำและเที่ยงตรงจึงมักใช้วิธีการวัดหาค่าเฉลี่ยของผลลัพธ์ที่ได้ แต่มันจะยุ่งยากมากขึ้นเมื่อมันมีหลายการทดสอบ และในแต่ละกระบวนการมีผลลัพธ์ที่สนใจหลายค่า การใช้เขียนโปรแกรมเข้าไปอ่านค่าที่สนใจเพื่อมาหาค่าเฉลี่ยแล้วพลอทกราฟให้เสร็จในโปรแกรมเดียว ช่วยทุ่นแรงได้เยอะ ไม่อย่างนั้นต้องมาใช้ OO หรือ Ms excel เพื่อหาค่าประมาณแล้วมาพลอทกราฟ ซึ่งต้องออกแรงมาก(เคยโง่ทำมาแล้ว :( ) ยิ่งข้อมูลหลายชุดแต่ละชุดมีผลลัพธ์มากกว่าร้อยที่ต้องหาค่าเฉลี่ยคงไม่ดีเอามากๆ โปรแกรมจัดการข้อมูลสักตัวคงช่วยจัดการปัญหาเปล่านี้ได้เยอะทีเดียว
ช่วงนี้สนใจ Python เป็นพิเศษ เลยคิดว่าน่าจะใช้ Python ช่วยในการจัดการกับข้อมูลหาค่าเฉลี่ย และลองพลอทกราฟดู หาข้อมูลไปเจอจังๆ กับ พลอทแบบ advance ด้วย matplotlib ที่เขียนขึ้นโดยคุณโบว์ เลยลองปรับใช้ดูก็ช่วยได้มากทีเดียว

#!/usr/bin/python

import pylab

maxDisp = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]
avgMatchTime = [0.17734787000666669, 0.31560221382666653, 0.44407054089666703, 0.59776487069666673, 0.77322498172333276, 0.90212421176666646, 1.0252877463399999, 1.1674104922266662, 1.2369528987466674, 1.5200350616499998, 1.6371858816133336, 1.716757974836665, 1.9127856219233339, 2.0052048588633338, 2.1540187028333326, 2.3004805823833334, 2.6341289766399982, 2.5638312632966653, 2.7569182477666678, 3.0103878139266693]
avgPostTime = [0.072186028033333294, 0.087022158780000025, 0.10114363204333329, 0.11485705034999998, 0.12757525349000001, 0.14015580686333329, 0.16022517377666665, 0.17268059137999994, 0.18301751240666669, 0.19857297047333336, 0.21165682732333327, 0.22189095372000012, 0.23661178623000018, 0.24874171732333333, 0.26206635718999988, 0.27597628613000014, 0.28714034421999984, 0.30001711474000009, 0.31519068086000002, 0.3259409633833335]
avgTotalTime = [0.27067355572666657, 0.42446094033333365, 0.5677416830466665, 0.73548723805333349, 0.92397964601666649, 1.0653083139099992, 1.2085652136666669, 1.3631419190033331, 1.4430662560500005, 1.7417219116266665, 1.8718606984533328, 1.9616584171466684, 2.1724915346400007, 2.2769267055099993, 2.4390897750733327, 2.5994740052300003, 2.9441218139700021, 2.886547701913333, 3.0948427466366679, 3.3589163385466656]

#ploat graph
pylab.plot(maxDisp, avgMatchTime,'-bo',linewidth=2)
pylab.plot(maxDisp, avgPostTime, '-yo',linewidth=2)
pylab.plot(maxDisp, avgTotalTime, '-ro',linewidth=2)

labelProperty = dict(fontweight='bold',fontsize='12')
pylab.xlabel('Maximum amount disparity', labelProperty)
pylab.ylabel('time (s)', labelProperty)
legends = ('Average matching scan line time',
'Average post-processing time',
'Average total time')
pylab.legend(legends,
loc='upper left', shadow=True, fancybox=True)

pylab.xlim(0,210)
pylab.xticks(maxDisp)
pylab.grid(True)

pylab.show()
นี่เป็นตัวอย่างการเขียนกราฟเท่านั้นที่จริงแล้วข้อมูลที่เขียนไว้เป็น list นั้นเป็นการคำนวณมา แต่เพื่อให้สามารถทดสอบรันสคริปท์ได้เลยกำหนดค่าตัวแปรไว้เลยดีกว่า mathplotlib สามารถปรับแต่งอะไรได้มากพอสมควร ลักษณะคล้ายกับการเขียนกราฟใน MATHLAB มาก (ผมเคยไม่ใช้อย่างจริงจังนะครับ แต่เคยใช้ Octave) ใครที่ต้องเขียนโปรแกรมจำลองอะไรสักอย่าง หรือใช้พวก MATHLAB อยู่ หากต้องการเปลี่ยนมาใช้ของฟรี ผมว่าเป็นตัวเลือกที่น่าสนใจไม่น้อยเลยครับ
อีกหนึ่งตัวอย่างครับ อันนี้ต้องเพิ่ม pylab.subplots_adjust( bottom=0.2) เพื่อให้ยืดชื่อการแสดงผลค่าของแกน x ลงไปด่านล่างอีก ถ้าไม่เพิ่มจะมีผลดังรูปด้านล่าง ชื่อแกน x จะหายไปด้วย

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ตัวเอ๋ยตัวผม

กลอนนี้ใช้เวลาประมาณ 20 นาทีเขียนขึ้นมาในห้องเรียนวิชาสัมนา 1 เพราะอาจารย์อยากให้แนะนำตัวเองเป็นกลอน ไม่รู้จะแต่งว่าไงเลยแต่งออกมาเป็นดอกสร้อย เห็นว่าพอใช้ได้เลยเอามาลงไว้เป็นอนุสร ๏ ตัวเอ๋ยตัวผม นิยมในพระพุทธศาสนา ตั้งจิตตั้งใจตั้งหน้า ใฝ่หาความรู้สู่ตน ตั้งใจศึกษาให้เชี่ยวชาญ ชำนาญในศาสตร์ที่ฝึกฝน ฝึกจิตฝึกสันดานให้เป็นคน เป็นชนในชาติที่ดีเอย ๚ะ๛

บันทึกการจัดงานศพ: พิธีฌาปนกิจศพ

ตรงส่วนนี้คงจะเขียนเกี่ยวกับพิธียกศพออกจากบ้าน และเกร็ดต่างๆ เล็กๆ น้อยๆ เนื่องจากที่จัดงานจะไม่นิยมไว้ศพที่วัด จะไว้ศพที่บ้าน และถ้าเป็นไปได้จะไว้ศพในบ้านเสียด้วยซ่ำ เมื่อถึงวันฌาปนกิจศพ หรือเผาศพ ก็จะมีการเซ่นไหว้ครั้งใหญ่ก่อนเคลื่อนย้ายศพไปวัดเพื่อฌาปนกิจ เครื่องเซ่นไว้จะประกอบไปด้วย ข้าว 5 ถ้วย กับข้าว 5 อย่าง หัวหมู ไก่ต้ม ไข่ต้ม หมูสามชั้นต้ม หมี่เหลืองผัด กุ้ง หอย ปู ปลา ผลไม้ 5 อย่าง ขนมขึ้น เมื่อมีการเซ่นไหว้ทุกครั้งจะต้องมี สัปรด น้ำชา 3 จอก เหล้าขาว 5 จอก(หลานๆ บอกว่าเจ็คไม่กินเหล้าขาว แต่มีคนบอกว่าเป็นการไหว้ตามประเพณี ^^ ) ซึ่งแต่ละอย่างมีความหมาย แต่ผมจำไม่ได้ต้องหาอีกครั้งนึง ตัวอย่างเครื่องเซ่นไหว้ เมื่อถึงพิธีเซ่นไหว้ จะมีการเซ่นไหว้โดยแบ่งออกเป็นคณะ แต่เพื่อความสะดวกและรวบรัดจึงมีการไหว้เพียงไม่กี่คณะ ซึ่งก็เหมือนเดิมคือผู้ที่มีศักดิ์สูงกว่าจะไม่รวมการเซ่นไหว้ครั้งนี้ คณะแรกจะเป็นผู้ไกล้ชิดผู้ตายมากที่สุดเริ่มตั้งแต่ลูกและภรรยา หลังจากนั้นก็จะเป็นน้องๆ แล้วก็หลานๆ และก็มิตรรักและผู้คนที่นับถือผู้ตาย หากเป็นเมื่อสมัยก่อนนั้น ต้องแยกออกเป็นเขย เป็นสะไภ้ ไหว้กันหลายยกหล

ด้วยระลึกถึงคุณย่า บันทึกจากความทรงจำ

บันทึกนี้เขียนขึ้นเพื่อบันทึกความทรงจำของผมที่มีต่อคุณย่าที่ล่วงลับไปแล้วอย่างไม่มีวันหวนคืน คุณย่าเปรียบเหมือนฟางเส้นสุดท้ายที่ร้อยครอบครัวใหญ่ของเราเอาไว้ไม่ให้แตกแยก หลังจากที่เสียคุณปู่ไปเมื่อ 23 ปีก่อน เนื่องจากบริเวณจังหวัดกระบี่ ตรัง พังงา ภูเก็ต มีชาวจีนอาศัยอยู่มาก แต่มักจะเป็นชาวจีนที่อพยพมาไทยนานแล้ว จากการการสังเกตของผม ชาวจีนแถบนี้โดยมากน่าจะเป็นชาว เปอรานากัน หรือชาวจีนที่อพยพมาจากจีนแล้วตั้งถิ่นฐานอยู่ในแหลมลายูหรืออินโดนีเซีย แล้วหลังจากนั้นจึงอพยพมาอาศัยต่อที่ประเทศไทย จากการบอกเล่าของคุณแม่ ก๋งเคยเล่าให้ฟังว่าตอนยังเด็กเคยแจวเรือจ้างอยู่ที่ปีนัง คุณย่าเคยเล่าว่าเป็นชาวฮกเกี้ยน อีกทั้วจากรูปวาดคุณย่าทวดที่มีการเกล้ามวยผม สวมเสื้อคอลึก ส่วนทางบ้านมีการใช้คำเรียกจีนผสมไทยถิ่นใต้อยู่มาก ผู้หญิงทุกคนนิยมสวมผ้าปาเต๊ะ เสื้อลูกไม้ (เสื้อฉลุลายดอกไม้) อาหารการกินเป็นแบบชาวไทยถิ่นใต้ทุกประการ (กินน้ำพริก แกงส้มเก่งกันทุกคน ยกเว้นก๋ง :D) อีกทั้งก๋งเกิดที่ดินแดนแถบนี้ไม่ได้เดินทางมาจากเมืองจีน (บางทีเรียก เตี่ยต่อเตี่ย คือ ทวดมาจากจีน ส่วนสถานที่เกิดไม่แน่ใจว่าเป็นปีนังหรือไทย)