01204472/ตัวอย่าง matplotlib

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา

สำหรับตัวอย่างด้านล่าง เรียกใน 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()