นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
Network
Members · Following: 0 · Followed: 16

อ่าน: 1579
ความเห็น: 0

ก้าวย่าง ทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: KML vs R ยกที่ ๑๒ - ลองของ ๒

เปลี่ยน output device ให้กับ R

มาลองของกันอีกรอบนะครับ

หลังจากที่บันทึกที่แล้วผมหาทางเปลี่ยนการวาดรูปแนว floodway ที่เป็น points ให้เป็น lines ได้แล้วโดยใช้ฟังก์ชัน lines() แทน plot() เพื่อเพิ่ม layer ใหม่ซ้อนทับ layer ที่เป็นพื้นหลัง (layer พื้นหลังใช้ฟังก์ชัน plot())

การเขียนคำสั่งต้องเขียนตามลำดับคือ

> plot(TH.map)
> lines(test1.67.dat@coords, col="blue")
> lines(test1.312.dat@coords, col="red")

รูปแนว floodway ที่ได้จะอยู่ในตำแหน่งล้อมรอบกรุงเทพฯ บนแผนที่ประเทศไทยที่เกิดจากการนำข้อมูลที่ได้จาก GADM มาวางเป็น layer พื้นหลัง

แต่เมื่อบันทึกรูปที่ได้จากคำสั่งข้างต้นพบว่ารูปมีความละเอียด (resolution) ค่อนข้างต่ำและมีพื้นที่ว่างรอบๆรูปเยอะเกินไป เมื่อลองบันทึกรูปเป็น emf ไฟล์ก็พบว่าไฟล์รูปมีขนาดถึง 3.2MB

ผมจึงหาทางที่จะควบคุมการบันทึกรูปภาพเป็นแฟ้มข้อมูลในโปรแกรม R

โปรแกรม R มีชุดคำสั่งเสริมสำหับ graphic มากมาย

เท่าที่ผมทราบมีชุดคำสั่งที่เกี่ยวข้องกับการจัดการรูปภาพอย่าง png jpeg หรือแม้แต่ gif (ต้องติดตั้งชุดคำสั่งเสริมข้างต้นถึงจะใช้งานได้) ส่วนการจัดการรูปภาพที่เป็น vector อย่าง metafile นั้นผมยังไม่มีข้อมูลในส่วนนี้

แต่ในที่สุดผมก็ค้นหาจนเจอว่าหากต้องการจัดการบันทึกรูปภาพเป็น metafile นั้นให้ทำผ่าน Windows Graphics Devices ของ R (windows {grDevices})

พูดให้ง่ายเข้า Windows Graphics Devices ของ R ก็คือหน้าต่างสำหรับแสดงผลลัพธ์ที่เป็น graphics ของโปรแกรม R นั่นเอง

ผลลัพธ์จากคำสั่งที่เป็นข้อความ (text) จะแสดงผลลัพธ์ที่ R console แต่หากเป็น graphics โปรแกรม R จะเปิดหน้าต่างอีกหน้าต่างขึ้นมาสำหรับแสดงผล แยกต่างหากจากหน้าต่างของ R console (R Console เป็นหน้าต่างหลักของโปรแกรม R สำหรับพิมพ์บรรทัดคำสั่งและแสดงผลในส่วนที่เป็นข้อความ)

การเปิดหน้าต่างสำหรับแสดงผลลัพธ์ที่เป็น graphics ในโปรแกรม R นั้นสามารถเปิดหน้าต่างใหม่ได้จากการเรียกใช้ฟังก์ชัน

> windows()
> X11()
> x11()
> win.graph()

จะเรียกใช้ฟังก์ชันไหนจาก ๔ ฟังก์ชันข้างต้นก็ได้

ที่มีหลายชื่อก็เพื่อให้ใช้งานได้กับระบบปฏิบัติการที่ต่างกันได้ (x11, X11 เป็น Windows Server บนเครื่องที่ติดตั้งระบบปฏิบัติการตระกูล *nux, *nix หรือสภาพแวดล้อมการทำงานแบบ Windows บนระบบปฏิบัติการ *nux, *nix)

การใช้ฟังก์ชันข้างต้นต้องระบุค่าพารามิเตอร์ให้ด้วย ไม่เช่นนั้นโปรแกรม R จะกำหนดค่าต่างๆให้เอง เช่น windows(width, height , ...)

> windows(5,3)

ค่า width และ height มีหน่วยเป็นนิ้ว ถ้าไม่ระบุโปรแกรม R จะกำหนดให้มีค่าเท่ากับ

แต่หากระบุเป็น win.metafile() ก็จะหมายถึงการส่งข้อมูลออกไปจัดเก็บเป็นแฟ้มข้อมูล (ที่ระบุ) หรือหากระบุเป็น win.print() ก็จะส่งผลลัพธ์ออกทางเครื่องพิมพ์ (ส่งผลลัพธ์จากการประมวลผลคำสั่งไปยังฟังก์ชันสำหรับการพิมพ์ของระบบ(ปฏิบัติการ))

รูปแบบคำสั่งจะเป็น

win.metafile(filename = " ", width = 7, height = 7, pointsize = 12)

และ

win.print(width = 7, height = 7, pointsize = 12, printer = " ")

เรามาดูเฉพาะในส่วนของ win.metafile() กันนะครับ เนื่องจากเกี่ยวข้องกับเรื่องราวในบันทึกนี้ครับ

รูปแบบของการจัดเก็บข้อมูลที่เป็น Windows Meta File ที่รองรับนั้นมี ๒ สกุลคือ .emf และ .wmf

ผมเลือกเป็น .wmf ครับ เนื่องจาก .emf นั้นมีให้เลือกจากเมนูของ Windows Graphics Device ของ R อยู่แล้วครับ

ทั้งนี้เพื่อทดลองปรับแต่ง ขนาด ความละเอียด ของรูปที่จะจัดเก็บเป็นไฟล์รูปภาพเท่านั้นนะครับ เช่น

> win.metafile(file ="c:/Rworkplace/test001.wmf", 12, 20)
> plot(TH.map)
> lines(test1.67.dat@coords, col="blue")
> lines(test1.312.dat@coords, col="red")
> dev.off()
null device
          1

dev.off() เป็นการสั่งให้ปิดหรือยุติการแสดงผลในส่วนที่เป็น graphics เช่นหากเปิดหน้าต่างแสดงผลรูป/ กราฟอยู่เมื่อเรียกใช้ฟังก์ชัน dev.off() หน้าต่างสำหรับการแสดงผล graphics ก็จะถูกปิด

หรือหากในกรณีที่สั่งให้เก็บผลลัพธ์ที่เป็น graphics เก็บไว้เป็นแฟ้มข้อมูล (รูปภาพ, pdf, ps) เมื่อใช้ฟังก์ชัน dev.off() ก็จะหมายถึงการยุติการจัดเก็บข้อมูลลงในแฟ้มข้อมูลที่ระบุ

ในตัวอย่างคำสั่งข้างต้นเมื่อเรียกใช้ฟังก์ชัน dev.off() ก็จะหมายถึงจะไม่มีการจัดเก็บผลลัพธ์ที่เป็น graphics ลงในแฟ้มข้อมูล test001.wmf อีกแล้ว

ฟังก์ชัน win.metafile() จะคล้ายๆ กับฟังก์ชัน sink() แตกต่างกันตรงที่ sink() จะเป็นการจัดเก็บผลลัพธ์ที่เป็นข้อความ (ไม่จัดเก็บข้อมูลที่เป็น graphics) ไว้ในแฟ้มข้อมูลที่ระบุ เช่น sink("my_result.txt") หมายถึงให้ส่งผลลัพธ์ต่างๆ ที่เป็นข้อความ (text) ไปจัดเก็บไว้ในแฟ้มข้อมูลที่ชื่อ my_result.txt) และจะยุติการส่งผลลัพธ์ไปจัดเก็บในแฟ้มข้อมูล my_result.txt เมื่อเรียกใช้ฟังก์ชัน sink()

หรือให้กลับมาแสดงผลลัพธ์ (ที่เป็นข้อความ) ที่ R console ตามปกติ

ผมทำการทดสอบดูแล้วไม่ว่าจะเปลี่ยนค่าของ width และ height เป็นเท่าไหร่ขนาดของไฟล์อยู่อยู่ที่ 3.2 MB เสมอ ซึ่งมีค่าเท่ากับการบันทึกเป็นแฟ้มข้อมูล emf จากเมนูที่ Windows Graphics Device และเท่ากับการเลือกบันทึกผลลัพธ์เป็น.emf จากฟังก์ชัน win.metafile(filename = "c:/Rworkplace/test001.emf", ...)

แต่หากเราไม่ระบุชื่อแฟ้มข้อมูล (สกุล .wmf หรือ .emf) หรือกำหนดให้ filename ="" เช่น win.metafile(file ="", 12, 20) เมื่อเราสั่งปิด Device (dev.off()) โปรแกรม R ก็จะทำการ copy ผลลัพธ์เก็บไว้ในหน่วยความจำ (clipboard) เช่น

> win.metafile(file ="", 12, 20)
> plot(TH.map)
> lines(test1.67.dat@coords, col="blue")
> lines(test1.312.dat@coords, col="red")
> dev.off()
null device
          1
 

ซึ่งเราสามารถวาง (paste) graphics ที่ถูกคัดลอก (copy) เก็บไว้ในหน่วยความจำที่โปรแกรมประยุกต์ต่างๆ (ที่สนับสนุน) ได้ เช่นวาง (paste) ในโปรแกรมไมโครซอฟท์เวิร์ด power point หรือ PhotoScape เป็นต้น

เราเอง


หมวดหมู่บันทึก: บริการวิชาการ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 05 เมษายน 2555 00:44 แก้ไข: 05 เมษายน 2555 08:42 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 DaDa, Ico24 ServiceMan, และ 2 คนอื่น.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 35.173.234.140
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ