การเขียนกราฟแสดงความคลาดเคลื่อนด้วยลูกศรแสดงทิศทาง(Quiver plot) ด้วย Python

9 09 2009

กราฟแสดงความคลาดเคลื่อนด้วยลูกศรแสดงทิศทาง หรือการพลอทแบบ Quiver ได้เคยใช้มาบ้างแล้วใน octave [สวรินทร์เคยเขียนวิธีทำแล้ว] พอมาทำงานด้วยภาษาไพธอนก็มีฟังก์ชั่นนี้ด้วย แต่ต้องโหลด pylab เข้าไปก่อนเพื่อใช้แสดงกราฟ

การเขียนกราฟแบบนี้นิยมใช้ในการแสดงความคลาดเคลื่อนทางตำแหน่ง (x,y) ความคลาดเคลื่่อนเป็น(u,v) อย่างงานผมใช้ในการแสดงความคลาดเคลื่อนลองเลนส์ (Lens Distortion)

ขั้นตอนก็มีดังนี้

ข้อมูลที่นำมาเขียนนั้น เตรียมให้เป็น ข้อมูล x,y,dx,dy
x,y = ตำแหน่งในแกน x และ  y
dx,dy = ความคลาดเคลื่อนในแนวแกน x และ y หรือ dx = u, dy = v นั่นเอง

ข้อมูลมีดังนี้

  x      y    dx  dy
2000   1000   3   5
2505   1025   4   2
2110   1210   3   4
1973   1415   7   5
2309   1362   6   5

โค้ดมีดังนี้ (แบบพื้นฐานสุดๆ เลยนะครับ)

from numpy import *
from pylab import *
x=[[2000],[2505],[2110],[1973],[2309]];
y = [[1000],[1025],[1201],[1415],[1362]];
dx=[[3],[4],[3],[7],[6]];
dy=[[5],[2],[4],[5],[5]];
figure()
quiver(x,y,dx,dy)
show()
from numpy import *
from pylab import *
x=[[2000],[2505],[2110],[1973],[2309]];
y = [[1000],[1025],[1201],[1415],[1362]];
dx=[[3],[4],[3],[7],[6]];
dy=[[5],[2],[4],[5],[5]];
figure()
quiver(x,y,dx,dy,units=”x”,width=2, color=’r’)
show()

ได้ผลดังภาพ

quiver01

ถ้าเพิ่มชื่อและลูกเล่นอีกนิดหน่อยจะได้เป็นแบบนี้

quiver02

ก็ได้กราฟที่ดูดีมากขึ้นทีเดียว

ผมชอบกราฟของ ไพธอนตรงที่ ฟังก์ชั่น Zoom/Pan ของส่วนแสดงกราฟ ที่สามารถใช้เมาส์ซ้ายลากเลื่อนกราฟดูในพื้นที่ที่สนใจได้
และใช้เมาส์ขวาลากปรับมาตราส่วนจะขยายเข้าหรือออกได้ สะดวกในการอ่านค่าจากกราฟได้ดีทีเดียว ยืดหยุ่นและใช้งานง่ายดี

สำหรับการพลอตค่าความพิดเพื้ยนของเลนส์ในงานผมนั้นกำลังหาทางเขียนกราฟให้ออกมาในรูปแบบนี้อยู่
ติดตรงที่ว่าจะเขียนกราฟจากสมการโดยตรงได้อย่างไร โดยไม่ต้องนั่งทำทีละจุด น่าจะมีแบบใส่สมการแล้วออกมาเลย
กำลังทดลอง และค้นหาอยู่ครับ


Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: