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

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
เครือข่าย
สมาชิก · ติดตาม: 0 · ผู้ติดตาม: 16

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

ก้าวย่างทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: เรื่องเล่าจาก research club - ๕ [C]

เรื่องเล่าจาก research club ตอนที่ ๕: pyramid.plot จาก package plotrix ถึงกับอืดเมื่อนำมาใช้กับประชากรขนาดใหญ่

ครั้งที่แล้วเมื่อดูจาก video การ dubug ฟังก์ชัน pyramid.plot() จาก package plotrix เราพบว่าเมื่อทำการ debug ฟังก์ชัน pyramid.plot() มาถึงจุดหนึ่ง ดูเหมือนว่า R console  จะหยุดนึ่งไม่ตอบสนองไประยะเวลาหนึ่ง (ประมาณ ๒ -๓ นาที) ก่อนที่จะเห็นความเคลื่อนไหวในส่วนของ graphics device หรือส่วนแสดงผลของกราฟฟิก

 

ซึ่งระยะเวลาที่ใช้สำหรับสร้างปิรามิดใช้เวลาประมาณ ๖ นาที

 

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

เราจะเห็นว่ามีการวาดเส้นแกนนอนเส้นบาง ๆ ก่อน ๑ เส้น ซึ่งใช้เวลาไม่นาน จากนั้นเราจะเห็นแถบสีดำทึบ ๆ ค่อย ๆ เพิ่มความยาวขึ้นทีละน้อย ๆ จากด้านซ้ายมือไปขวามือ

หลังจากสร้างแกนนอนแล้วก็จะมีการสร้างแกนตั้ง ใส่ label แกนตั้งและวาดแท่งความถี่ของประชากรตามกลุ่มอายุ ซึ่งขั้นตอนนี้ใช้เวลานิดเดียว

 

ขั้นตอนการสร้างแกนนอนที่นานมากนั้น เมื่อดูบรรทัดคำสั่งจากการ debug พบว่า เป็นบรรทัดคำสั่งนี้ครับ

Browse[2]>
debug: if (is.null(laxlab)) {
    laxlab <- seq(xlim[1] - gap, 0, by = -1)
    axis(1, at = -xlim[1]:-gap, labels = laxlab)
} else axis(1, at = -(laxlab + gap), labels = laxlab)
Browse[2]>
debug: laxlab <- seq(xlim[1] - gap, 0, by = -1)
Browse[2]>
debug: axis(1, at = -xlim[1]:-gap, labels = laxlab)
Browse[2]>
debug: if (is.null(raxlab)) {
    raxlab <- 0:(xlim[2] - gap)
    axis(1, at = gap:xlim[2], labels = raxlab)
} else axis(1, at = raxlab + gap, labels = raxlab)
Browse[2]>
debug: raxlab <- 0:(xlim[2] - gap)
Browse[2]>
debug: axis(1, at = gap:xlim[2], labels = raxlab)

 

และบรรทัดคำสั่งนี้

 

Browse[2]>
debug: if (gap > 0) {
    axis(2, at = 1:ncats, labels = rep("", ncats), pos = gap,
        tcl = -0.25)
    axis(4, at = 1:ncats, labels = rep("", ncats), pos = -gap,
        tcl = -0.25)
}
Browse[2]>
debug: axis(2, at = 1:ncats, labels = rep("", ncats), pos = gap, tcl = -0.25)
Browse[2]>

 

เราจะเห็นว่าบรรทัดคำสั่งข้างต้นทั้ง ๒ ชุดบรรทัดคำสั่งเป็นบรรทัดคำสั่งที่ใช้สร้างแกนนอน

 

สรุปความตามบรรทัดคำสั่งทั้ง ๒ ชุดได้ว่า ให้ทำการตรวจสอบว่าแกนนอนแต่ละด้าน (ซ้ายและ ขวา) ควรจะมีความยาวเท่าไหร่ หรือคิดเป็นร้อยละเท่าไหร่ของพื้นที่สำหรับวาดกราฟ โดยความยาวของแกนนอนจะดูจากค่าความถี่หรือค่าร้อยละสูงสุด (กรณีเป็นร้อยละ) ของประชากรในแต่ละช่วงอายุ

จากนั้นจะทำการกำหนดค่า label แกนนอนโดยจะ label ให้ทีละค่า ดังนั้นหากความถี่สูงสุดของประชากรในแต่ละช่วงอายุมีค่าเป็นหมื่น ก็จะมีการขีดเส้น scale ของแกนนอนทุกค่า จากศูนย์ไปถึงค่าสูงสุด (คือ ๑ หมื่น) และทำอย่างเดียวกันทั้งด้านซ้ายและด้านขวา

 

ที่เราเห็นเป็นแถบสีดำ ความยาวเพิ่มขึ้นทีละนิดนั้นคือ การทับซ้อนกันของเส้น label แกนนอนนั่นเอง

 

ดังนั้นเพื่อเป็นการป้องกันไม่ให้เกิดเหตุการณ์นี้ขึ้น เราจึงจำเป็นที่จะต้องระบุ การกำหนดค่าแกนนอนให้กับฟังก์ชัน pyramid.plot() หรือต้องกำหนดค่าตัวเลือก laxlab และ raxlab ให้กับฟังก์ชัน pyramid.plot() ด้วย

 

ซึ่งหากไม่กำหนดค่า laxlab และ raxlab ให้ ฟังก์ชัน pyramid.plot() ก็จะใช้ค่าเริ่มต้นที่กำหนดมาให้คือ NULL หรือไม่ได้กำหนดนั่นเอง

 

เมื่อไม่ได้กำหนดค่า laxlab และ raxlab ให้ ฟังก์ชัน pyramid.plot() ฟังก์ชัน pyramid.plot() ก็จะทำการสร้าง scale แกนนอนให้เองโดยใช้ค่า scale สูงสุดจากค่าความถี่สูงสุดของประชากรแต่ละช่วงอายุ

 

สรุปแบบง่าย ๆ คือ

  • สิ่งที่ทำให้ช้าคือการไม่กำหนดค่า laxlab และ raxlab ให้กับฟังก์ชัน pyramid.plot()
  • การแก้ไขทำได้โดยการกำหนดค่า laxlab และ raxlab ให้กับฟังก์ชัน pyramid.plot()

 

อิอิอิ

 

เราเอง

 

เพลง: Evergreen Tree
ศิลปิน: Cliff Richard

 

หมวดหมู่บันทึก: พัฒนางานประจำ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 15 กรกฎาคม 2557 17:34 แก้ไข: 28 เมษายน 2563 17:28 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 คนธรรมดา, Ico24 ทดแทน, และ 2 คนอื่น.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น
คุณต้องทำการเข้าระบบก่อนแสดงความเห็น