01204472/ตัวอย่าง matplotlib
สำหรับตัวอย่างด้านล่าง เรียกใน ipython ที่เรียกด้วย --pylab ถ้าเรียกใช้ใน python ต้อง import pylab ก่อน ด้วยคำสั่ง
from pylab import *
ด้านล่างเป็นโปรแกรมที่พล็อตกราฟของฟังก์ชัน
from pylab import * x = arange(0,5,0.1) y = sin(x) plot(x,y) show() # เรียกคำสั่ง show() ถ้าสั่งจากใน python
ถ้าเรียกใน pylab ไม่จำเป็นต้องสั่งคำสั่ง show() เนื่องจาก pylab จะแสดงกราฟให้โดยอัตโนมัติ ถ้าเรียกคำสั่ง show() แล้วกราฟจะแสดงค้างไว้ ต้องปิดหน้าต่างนั้นก่อนจึงจะทำงานต่อได้
ในกรณีที่เรียกใน ipython --pylab ถ้าต้องการลบรูป สามารถสั่ง clear figure ด้วยฟังก์ชัน clf()
ถ้าเราต้องการพล็อตกราฟ 3 มิติ เราจะต้อง import แกนสามมิติมาก่อน โดยสั่ง
from mpl_toolkits.mplot3d import Axes3D
จากนั้นเราจะทำงานกับแกน 3 มิติ ที่สร้างโดยคำสั่งต่อไปนี้
ax = gca(projection='3d')
- หมายเหตุ: ในกรณีที่เราพล็อตกราฟสองมิติ ในตัวอย่างก่อนหน้า เพื่อความสะดวกเราจะมีแกนมาตรฐานอยู่ก่อนแล้ว เมื่อเราสั่ง plot ฟังก์ชันนั้นจะทำงานกับแกนนั้น เราสามารถอ้างอิงถึงแกนดังกล่าวได้ด้วยฟังก์ชัน gca()
เราจะเตรียมข้อมูลสำหรับการวาดกราฟ เพื่อแสดงตัวอย่าง เราจะพล็อตฟังก์ชัน
เราจะพล็อตโดยให้ตัวแปร x และ y มีขอบเขต -5 ถึง 5
x = arange(-5,5,0.1) y = arange(-5,5,0.1)
เพื่อความสะดวกในการเรียกใช้งาน เราจะสร้างอาร์เรย์สองมิติแทนค่าในแกน x และ y ได้โดยสั่ง meshgrid
xx,yy = meshgrid(x,y)
จากนั้นคำนวณฟังก์ชันและพล็อต
zz = sin(sqrt(xx**2 + yy**2)) ax.plot_wireframe(xx,yy,zz)
สามารถสั่ง ax.plot_surface(xx,yy,zz) หรือ ax.contour(xx,yy,zz) ก็ได้
ตัวอย่างอื่น ๆ ดูได้จากเว็บ matplotlib หรือลองดูจากหน้า screenshot เพื่อเลือกดูตัวอย่างก็ได้
การพล็อตกราฟแบบ scatter
เราสามารถใช้คำสั่ง scatter ในการพล็อตกราฟแบบจุดในระนาบ x-y ได้ ด้านล่างแสดงตัวอย่าง
import matplotlib.pyplot as plt plt.scatter([5,6,7],[17,16,15],c='blue') plt.scatter([10,11,12],[10,11,12],c='red') plt.scatter([1,-1,1,-1],[1,1,-1,-1],c='green',marker='D') plt.show()
ด้านล่างเป็นโปรแกรมที่อ่านไฟล์จาก argument แล้วพล็อต scatter โดยไฟล์จะมีรูปแบบ ดังนี้
- บรรทัดแรกระบุจำนวนจุด
- บรรทัดถัด ๆ มาระบุค่า 3 ค่า คือพิกัดแกน x, พิกัดแกน y และหมายเลขหลุ่ม เป็น 1 หรือ -1
เมื่อพล็อตจะแสดงกลุ่ม 1 เป็นสีแดง กลุ่ม -1 เป็นสีน้ำเงิน
import sys import matplotlib.pyplot as plt filename = sys.argv[1] def read_points(filename): f = open(filename) n = int(f.readline().strip()) points = [] for i in range(n): items = f.readline().strip().split() x = float(items[0]) y = float(items[1]) z = int(items[2]) points.append((x,y,z)) return points points = read_points(filename) plus = [(x,y) for x,y,z in points if z==1] minus = [(x,y) for x,y,z in points if z==-1] plt.scatter([x for x,y in plus], [y for x,y in plus], c='red') plt.scatter([x for x,y in minus], [y for x,y in minus], c='blue') plt.show()