วันศุกร์ที่ 27 พฤษภาคม พ.ศ. 2554

เครื่องมือช่วยพล๊อตกราฟ

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

หลังจากสำรวจรายการแพคเกจของ wheezy เกี่ยวกับการพล๊อตแล้วก็พบแพคเกจชื่อ plotdrop ซึ่งมีรายละเอียดน่าสนใจดังนี้ (จากรายละเอียดของแพคเกจ)
PlotDrop is designed for quick simple visualisation of 2D data series.
It is intended to be used in tandem with an external filesystem browser
such as GNOME's nautilus or KDE's konqueror. Files containing data are added
by dragging them from the browser to the file list.
อันที่จริงมีแพคเกจที่เกี่ยวกับ Data Visualization อีกเยอะเลยครับ แต่ตัวนี้มีลูกเล่นน้อยที่สุดทำให้รู้สึกว่าเรียนรู้ได้ง่ายที่สุด ก็เลยเลือกมาลองก่อน เราสามารถติดตั้งได้ทันทีโดย
# sudo apt-get install plotdrop
หากเป็นเครื่องของผมซึ่งเป็น wheezy แพคเกจนี้จะไปอยู่ในเมนูรูปภาพ (Graphic) ครับ เมื่อเรียกโปรแกรมนี้จากเมนูเราจะเห็นหน้าต่างแบบนี้
สิ่งที่เราต้องทำก็คือเอาข้อมูลให้โปรแกรมนี้ไป ข้อมูลจะต้องเป็น
  1. แฟ้มข้อความ เข้ารหัสแบบใดก็น่าจะได้ แต่ที่ผมใช้อยู่และไม่มีปัญหาคือ UTF-8
  2. ข้อมูลแยกหลัก (Column) กล่าวคือ ข้อมูล ก. อยู่หลัก 1 ข้อมูล ข. อยู่หลัก 2 ... อย่างนี้เรื่อยไป
  3. จำนวนแถว (Row) น่าจะต้องเท่ากัน ผมยังไม่เคยลองว่าถ้าจำนวนแถวไม่เท่ากันจะเกิดอะไรขึ้น
เราเรียกการจัดข้อมูลแบบนี้ว่า Delimated File และใน Octave เรามีคำสั่งที่ใช้จัดเตรียมชุดข้อมูลเพื่อพล็อตแบบนี้โดยใช้คำสั่ง dlmwrite ครับ เช่นถ้าเราต้องการพล็อตแกน x เป็นความถี่ในเวคเตอร์ f ขนาด 100x1 และแกน y เป็นความหนาแน่นสเปคตรัมกำลัง (Power Spectrum Density) P ขนาด 100x1 เช่นกัน เราจะใช้คำสั่ง dlmwrite สร้างแฟ้มข้อมูลที่ใช้กับ plotdrop ได้ดังนี้
octave> dlmwrite('mydlmfile.dlm',[f P]," ");
นี้หมายความว่า เราส่งข้อมูล f และ P ไปในเมตริกซ์เดียวกัน ส่งเข้าไปในแฟ้มข้อความธรรมดาชื่อ mydlmfile.dlm โดยที่ระหว่างข้อมูล f และ P จะคั่นด้วย Space (" ") เช่นถ้า
octave> f = [0 10 20 30]';
octave> P = [12 15 10 5]';
หน้าตาของแฟ้มข้อมูล mydlmfile.dlm จะเป็น
0 12
10 15
20 10
30 50
เราสามารถลากแฟ้มนี้ไปวางในพื้นที่ว่างในรูปข้างบนได้เลย หรือจะเรียกใช้คำสั่ง Series => Add File ... ก็ได้ เมื่อเราส่งข้อมูลให้ plotdrop ได้แล้ว เราสามารถ
  • เติมหัวเรื่อง ฉลากแกน x และฉลากแกน y ได้ในแท็ป Caption (แท็ปที่ 1)
  • เปลี่ยนขอบเขตของ x และ y ได้ในแท็ป Limits (แท็ปที่ 2)
  • เปลี่ยนหน้าตาการแสดงผลเช่น เป็นลอการิธึมในแกน x เป็นลอการิธึมในแกน y มีกริด ไม่มีกริด ฯลฯ ได้ในแท็ป Appreance (แท็ปที่ 3)
  • เพิ่มคำสั่งอื่น ๆ ในในแท็ปที่ 4 ผมยังไม่รู้ว่ามีคำสั่งพิเศษอะไรที่ใช้ได้บ้าง ตอนนี้ยังไม่จำเป็นเลยไม่ได้สนใจ
เมื่อเราเตรียมข้อมูลใน plotdrop แล้ว เราสามารถพล็อตกราฟดูได้ทันที หากเราพอใจและต้องการจะนำกราฟไปใช้ในเอกสารอื่น ๆ สามารถเก็บพล็อตลงแฟ้มได้โดย Plot => Plot to File ... ซึ่งผู้ใช้สามารถเลือกรูปแบบของแฟ้มส่งออกได้หลากหลายเช่น EPS PS LaTeX SVG PNG และอื่น ๆ สำหรับผมถ้าจะเอามาใช้กับ LibreOffice ผมก็ใช้แฟ้ม PNG นี่แหละครับ ง่ายดี

ผมพบว่าโปรแกรม plotdrop ตัวนี้ใช้ง่ายดี ช่วยให้ผมพล็อตกราฟจาก Octave เพื่อไปใช้ต่อในงานเอกสารอื่น ๆ ได้ง่าย เราสามารถเติม Caption ต่าง ๆ ได้สะดวก พล็อตดูได้ก่อน ถ้าชอบค่อยจัดลงแฟ้ม อย่างไรก็ตาม จากการทดลองใช้พบว่าในส่วนของ Caption ต่าง ๆ ยังไม่รองรับภาษาไทยครับ หากกรอกภาษาไทยลงไป เวลาพล็อตผมจะเห็นเป็นตัวเหลื่ยม ๆ แบบนี้ [] ทุกตัวอักษรไป ถ้ารองรับภาษาไทยด้วยคงจะดี

หากใครใช้แล้วมีเทคนิคอะไรจะมาแบ่งกัน ก็อย่าลืมมาบอกกันนะครับ

ไม่มีความคิดเห็น: