Wednesday, July 15, 2020

imagesc vs pcolor vs surf

โพสนี้เราจะมาเล่าเกี่ยวกับคำสั่งที่ใช้พล๊อต 2D matrix กันค่ะ

ก่อนอื่นเราจะสร้าง 2D matrix array ขึ้นมาก่อนโดยใช้ตัวอย่างจากโพสก่อนๆก็แล้วกัน

%% imagesc vs pcolor vs surf
npts = 51;
x = linspace(-1,1,npts);
y = x;
[Y,X] = meshgrid(y,x);
[phi,rho] = cart2pol(X,Y);

เอาล่ะ สมมติว่าเราจะพล๊อต rho ซึ่งเป็น 2D array โดยปกติเราจะใช้คำสั่ง imagesc ค่ะ

%% imagesc
figure(1)
imagesc(rho); axis image;
ที่ใช้คำสั่งนี้เป็น default เพราะว่ากราฟจะแสดงค่าที่อยู่ในmatrixโดยตรง และสีก็จะscaleตามค่าของmatrixนั้น 

ข้อเสียของimagescคือ ถ้าเรามีจำนวน data ไม่มาก รูปที่ได้จะไม่smooth อย่างที่เห็นรูปข้างบนเราสามารถเห็นpixelของแต่ละช่องได้

ดังนั้นเราจึงใช้อีกคำสั่งคือ pcolor จะได้รูปแบบนี้

%% pcolor
figure(2)
pcolor(rho);axis image;

ถ้าใช้คำสั่งนี้โดยไม่เขียนอะไรเพิ่มเติม เราจะเห็นช่องตารางของแต่ละ pixel แต่ถ้าเราเพิ่มคำสั่งเข้าไปดังนี้

shading interp;

รูปที่ออกมาจะ smooth มากกว่าที่ใช้ imagesc

คำสั่งสุดท้ายที่จะพูดถึงคือ surf ซึ่งทำงานคล้ายกับ pcolor แต่ใช้ในการวาดรูป 3 มิติ

%% surf
figure(3)
surf(x,y,rho); axis image;

เช่นเดียวกับ pcolor ถ้า plot surf โดยไม่ได้ใส่คำสั่งเพิ่มเติม รูปที่ออกมาจะเห็นเส้นตารางคั่นแต่ละ pixel

ถ้าใส่

shading interp;

เส้นที่คั่นก็จะหายไป และสีก็จะ smooth ขึ้น
แต่นอกจากจะทำให้smoothได้แล้ว สำหรับ 3D plot เรายังใส่ lighting และ เลือกมุมที่จะดูได้ด้วย

camlight; lighting gouraud;
lightangle(10,90)
view(45,35);
รูปก็จะออกมาดูดียิ่งขึ้นไปอีก

No comments:

Post a Comment