ผลต่างระหว่างรุ่นของ "01204472/ตัวอย่าง matplotlib"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) ล (ย้อนการแก้ไขของ CarolAnderson (Talk) ไปยังรุ่นของ Jittat) |
||
(ไม่แสดง 5 รุ่นระหว่างกลางโดยผู้ใช้ 2 คน) | |||
แถว 42: | แถว 42: | ||
สามารถสั่ง ax.plot_surface(xx,yy,zz) หรือ ax.contour(xx,yy,zz) ก็ได้ | สามารถสั่ง ax.plot_surface(xx,yy,zz) หรือ ax.contour(xx,yy,zz) ก็ได้ | ||
+ | |||
+ | ตัวอย่างอื่น ๆ ดูได้จากเว็บ [http://matplotlib.sourceforge.net/index.html matplotlib] หรือลองดูจากหน้า [http://matplotlib.sourceforge.net/users/screenshots.html screenshot] เพื่อเลือกดูตัวอย่างก็ได้ | ||
+ | |||
+ | == การพล็อตกราฟแบบ scatter == | ||
+ | |||
+ | เราสามารถใช้คำสั่ง [http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.scatter scatter] ในการพล็อตกราฟแบบจุดในระนาบ x-y ได้ ด้านล่างแสดงตัวอย่าง | ||
+ | |||
+ | <pre> | ||
+ | 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() | ||
+ | </pre> | ||
+ | |||
+ | ด้านล่างเป็นโปรแกรมที่อ่านไฟล์จาก argument แล้วพล็อต scatter โดยไฟล์จะมีรูปแบบ ดังนี้ | ||
+ | * บรรทัดแรกระบุจำนวนจุด | ||
+ | * บรรทัดถัด ๆ มาระบุค่า 3 ค่า คือพิกัดแกน x, พิกัดแกน y และหมายเลขหลุ่ม เป็น 1 หรือ -1 | ||
+ | |||
+ | เมื่อพล็อตจะแสดงกลุ่ม 1 เป็นสีแดง กลุ่ม -1 เป็นสีน้ำเงิน | ||
+ | |||
+ | <pre> | ||
+ | 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() | ||
+ | </pre> |
รุ่นแก้ไขปัจจุบันเมื่อ 06:03, 5 สิงหาคม 2555
สำหรับตัวอย่างด้านล่าง เรียกใน 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()