ผลต่างระหว่างรุ่นของ "01204472/ตัวอย่าง matplotlib"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
(minor updates)
(ย้อนการแก้ไขของ CarolAnderson (Talk) ไปยังรุ่นของ Jittat)
 
แถว 96: แถว 96:
 
plt.show()
 
plt.show()
 
</pre>
 
</pre>
 
== Why Have Good When You Can Have Better? ==
 
 
As I look back on my life, I realize that every time I thought I was being rejected from something good, I was actually being re-directed to something better. Steve Maraboli
 
 
[[http://goodvillenews.com/Why-Have-Good-When-You-Can-Have-Better-PdMtIo.html Why Have Good When You Can Have Better?]]
 
 
[[http://goodvillenews.com/wk.html GoodvilleNews.com - good, positive news, inspirational stories, articles]]
 
 
== Stop Using The Wrong Type of Intelligence ==
 
 
A man should hear a little music, read a little poetry, and see a fine picture every day of his life, in order that worldly cares may not obliterate the sense of the beautiful which God has implanted in the human soul. Johann Wolfgang von Goethe
 
 
[[http://goodvillenews.com/Stop-Using-The-Wrong-Type-of-Intelligence-6IGOxm.html Stop Using The Wrong Type of Intelligence]]
 
 
[[http://goodvillenews.com/wk.html GoodvilleNews.com - good, positive news, inspirational stories, articles]]
 
 
== New Toilet System Transform Waste into Electricity ==
 
 
Scientists from Nanyang Technological University (NTU) have invented a new toilet system that will turn human waste into electricity and fertilisers and also reduce the amount of water needed for flushing by up to 90 per cent compared to current toilet systems in Singapore.
 
 
[[http://goodvillenews.com/New-Toilet-System-Transform-Waste-into-Electricity-zvQBzk.html New Toilet System Transform Waste into Electricity]]
 
 
[[http://goodvillenews.com/wk.html GoodvilleNews.com - good, positive news, inspirational stories, articles]]
 
 
== Your Life Is What You Make It ==
 
 
If you limit your choices only to what seems possible or reasonable, you disconnect yourself from what you truly want, and all that is left is compromise. Robert Fritz
 
 
[[http://goodvillenews.com/Your-Life-Is-What-You-Make-It-aTRqC9.html Your Life Is What You Make It]]
 
 
[[http://goodvillenews.com/wk.html GoodvilleNews.com - good, positive news, inspirational stories, articles]]
 
 
== How To Make Peace With Imperfection ==
 
 
If you look closely at a tree youll notice its knots and dead branches, just like our bodies. What we learn is that beauty and imperfection go together wonderfully. Matthew Fox
 
 
[[http://goodvillenews.com/How-To-Make-Peace-With-Imperfection-AOuD91.html How To Make Peace With Imperfection]]
 
 
[[http://goodvillenews.com/wk.html GoodvilleNews.com - good, positive news, inspirational stories, articles]]
 

รุ่นแก้ไขปัจจุบันเมื่อ 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()