Matplotlib
ตัวอย่างกราฟและโค้ดที่สร้างด้วย Matplotlib | |
| ผู้ออกแบบ | จอห์น ดี. ฮันเตอร์ |
|---|---|
| นักพัฒนา | โครงการชุมชน Matplotlib |
| วันที่เปิดตัว | ค.ศ. 2003 |
| รุ่นเสถียร | 3.11.0
/ 12 มิถุนายน 2026 |
| ที่เก็บข้อมูล | |
| ภาษาที่เขียน | ภาษาไพทอน |
| เอนจิน |
|
| ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
| ประเภท | การแสดงข้อมูลเป็นภาพ, ซอฟต์แวร์สร้างกราฟ |
| สัญญาอนุญาต | Matplotlib license; สัญญาอนุญาตแบบเข้ากันได้กับ BSD |
| เว็บไซต์ | matplotlib |
Matplotlib เป็นไลบรารีของภาษาไพทอนสำหรับสร้างภาพข้อมูล แผนภูมิ และกราฟ ทั้งแบบคงที่ เคลื่อนไหว และโต้ตอบได้ เอกสารทางการอธิบาย Matplotlib ว่าเป็นไลบรารีครบเครื่องสำหรับสร้าง static, animated และ interactive visualizations ในไพทอน[1] ไลบรารีนี้ใช้ร่วมกับNumPyอย่างใกล้ชิด และเป็นองค์ประกอบสำคัญของระบบนิเวศไพทอนด้านการคำนวณเชิงวิทยาศาสตร์ร่วมกับ SciPy, pandas, Jupyter และ scikit-learn
Matplotlib สร้างกราฟได้หลายชนิด เช่น กราฟเส้น แผนภูมิแท่ง ฮิสโทแกรม แผนภาพกระจาย กราฟคอนทัวร์ ภาพข้อมูล กราฟสามมิติ และกราฟเชิงสถิติพื้นฐาน จุดเด่นของไลบรารีคือความยืดหยุ่นสูง สามารถใช้แบบง่ายผ่านโมดูล pyplot ที่คล้าย MATLAB หรือใช้แบบเชิงวัตถุผ่าน Figure และ Axes เพื่อควบคุมองค์ประกอบของกราฟอย่างละเอียด[2][3]
Matplotlib เริ่มพัฒนาโดยจอห์น ดี. ฮันเตอร์ใน ค.ศ. 2003 เพื่อให้ชุมชนวิทยาศาสตร์ไพทอนมีเครื่องมือสร้างกราฟที่ใช้งานคล้าย MATLAB แต่เป็นโอเพนซอร์สและทำงานร่วมกับไพทอนได้เต็มที่[4] ปัจจุบันโครงการพัฒนาโดยชุมชนและเป็นโครงการที่ได้รับการสนับสนุนทางการเงินผ่าน NumFOCUS[5] รุ่นเสถียรล่าสุดคือ 3.11.0 เผยแพร่เมื่อวันที่ 12 มิถุนายน ค.ศ. 2026 ตาม PyPI และเอกสาร stable ของโครงการ[6][7]
ชื่อ
[แก้]ชื่อ Matplotlib มาจากการผสมคำว่า MATLAB, plot และ library สะท้อนเป้าหมายเดิมของโครงการที่ต้องการให้ผู้ใช้ไพทอนสร้างกราฟได้ในรูปแบบคุ้นเคยกับ MATLAB แต่ไม่ต้องพึ่งซอฟต์แวร์เชิงพาณิชย์[4] ชื่อแพ็กเกจบน Python Package Index คือ matplotlib และธรรมเนียมการใช้งานทั่วไปคือ:
import matplotlib.pyplot as plt
ในภาษาไทย บทความนี้ใช้ชื่อ “Matplotlib” ตามชื่อทางการของโครงการ และใช้คำว่า “ไลบรารีสร้างกราฟ” หรือ “ไลบรารีแสดงข้อมูลเป็นภาพ” เพื่ออธิบายหน้าที่ของซอฟต์แวร์
ประวัติ
[แก้]Matplotlib เกิดจากความต้องการของนักวิทยาศาสตร์และวิศวกรที่ใช้ไพทอนในการคำนวณเชิงตัวเลข แต่ยังขาดเครื่องมือสร้างกราฟคุณภาพดีที่เชื่อมกับ NumPy ได้อย่างเป็นธรรมชาติ จอห์น ดี. ฮันเตอร์เริ่มพัฒนาไลบรารีนี้ใน ค.ศ. 2003 โดยตั้งใจให้ผู้ใช้สามารถสร้างกราฟแบบ MATLAB ได้ แต่ยังคงความสามารถของไพทอนในฐานะภาษาโปรแกรมทั่วไป[4]
เอกสารประวัติของโครงการระบุว่า Matplotlib มีรากจากการเลียนแบบคำสั่งกราฟิกของ MATLAB แต่เป็นอิสระจาก MATLAB และสามารถใช้ในแนวทางแบบไพทอนและเชิงวัตถุได้ โครงการเขียนด้วยไพทอนเป็นหลัก แต่ใช้ NumPy และโค้ดส่วนขยายอื่นเพื่อให้ทำงานกับอาร์เรย์ขนาดใหญ่ได้อย่างมีประสิทธิภาพ[4]
หลังการเสียชีวิตของฮันเตอร์ใน ค.ศ. 2012 โครงการยังคงพัฒนาโดยชุมชน Michael Droettboom และ Thomas Caswell มีบทบาทสำคัญในช่วงต่อมา และโครงการเติบโตเป็นซอฟต์แวร์พื้นฐานของ scientific Python[1] ตั้งแต่คริสต์ทศวรรษ 2010 เป็นต้นมา Matplotlib ไม่ได้เป็นเพียงเครื่องมือวาดกราฟโดยตรง แต่ยังเป็น backend หรือรากฐานให้ไลบรารีระดับสูงจำนวนมาก เช่น pandas และ seaborn ใช้สร้างภาพข้อมูล
สถาปัตยกรรมและแนวคิดการใช้งาน
[แก้]Matplotlib มีแนวคิดหลักคือการแยก “รูปภาพ” ออกจาก “แกนกราฟ” และองค์ประกอบย่อย ภาพหนึ่งภาพอยู่ในวัตถุ Figure ส่วนพื้นที่กราฟหรือแผนภูมิอยู่ในวัตถุ Axes ผู้ใช้สามารถสร้างรูปและแกนด้วย plt.subplots() แล้วเรียกเมทอดของ Axes เพื่อวาดข้อมูล เช่น plot, scatter, bar หรือ imshow[2]
ตัวอย่างการใช้งานแบบเชิงวัตถุ:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 200)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title("sine wave")
ax.set_xlabel("x")
ax.set_ylabel("sin(x)")
plt.show()
นอกจากแบบเชิงวัตถุ Matplotlib ยังมี pyplot ซึ่งเป็นส่วนติดต่อแบบ state-based หรือคล้าย MATLAB สำหรับการใช้งานแบบโต้ตอบและงานง่าย ๆ[3] อย่างไรก็ตาม เอกสารสมัยใหม่มักแนะนำให้ใช้รูปแบบเชิงวัตถุเมื่อกราฟซับซ้อน มีหลายแกน หรือต้องเขียนโค้ดที่ดูแลรักษาได้ง่าย
Backend และการแสดงผล
[แก้]Matplotlib แยกส่วนการสร้างกราฟออกจาก backend ที่ใช้แสดงหรือบันทึกผลลัพธ์ Backend คือชั้นซอฟต์แวร์ที่รับคำสั่งวาดภาพแล้วแสดงบนหน้าจอ บันทึกเป็นไฟล์ หรือฝังในแอปพลิเคชัน ผู้ใช้จึงสามารถใช้ Matplotlib ในสคริปต์ไพทอน, Python shell, Jupyter Notebook, เว็บแอปพลิเคชัน หรือโปรแกรมที่มี GUI ได้[1]
Matplotlib รองรับ backend หลายแบบ เช่น Agg สำหรับการเรนเดอร์เป็นภาพ raster, PDF, SVG และ PS สำหรับงานส่งออกเอกสาร รวมถึง backend แบบโต้ตอบที่เชื่อมกับ GUI toolkit เช่น Qt, Tk, GTK และ wxPython[8] ความสามารถนี้ทำให้ Matplotlib ใช้ได้ทั้งในงานวิจัยที่ต้องการภาพคุณภาพตีพิมพ์และในโปรแกรมที่ต้องฝังกราฟไว้ในส่วนติดต่อผู้ใช้
ประเภทกราฟและตัวอย่างภาพ
[แก้]Matplotlib สามารถสร้างภาพข้อมูลได้หลายแบบ ตั้งแต่กราฟพื้นฐานจนถึงภาพเชิงคณิตศาสตร์และวิทยาศาสตร์ที่ซับซ้อน ตัวอย่างในแกลเลอรีทางการมีทั้งกราฟเส้น แผนภูมิแท่ง แผนภาพกระจาย ฮิสโทแกรม box plot, errorbar, contour, heatmap, image, polar plot, 3D plot และกราฟแบบกำหนดแกนหรือ layout ซับซ้อน[9]
- หน้าจอตัวอย่างกราฟและโค้ดของ Matplotlib
- การใช้ Matplotlib ใน Jupyter Notebook
- ตัวอย่างแผนภาพกระจาย
- แผนภาพกระจายอีกแบบ
- พื้นผิวฟังก์ชันโรเซนบร็อก
- ภาพปรากฏการณ์เลี้ยวเบนวงกลมที่สร้างด้วยเครื่องมือวิทยาศาสตร์ไพทอน
pyplot และ pylab
[แก้]matplotlib.pyplot เป็นโมดูลที่นิยมใช้มากที่สุดของ Matplotlib เพราะมีคำสั่งสั้นและคล้าย MATLAB เช่น plot, scatter, hist, imshow และ show เอกสารทางการอธิบายว่า pyplot เป็น state-based interface ที่ให้วิธีวาดกราฟแบบ MATLAB-like และเหมาะกับกราฟโต้ตอบหรืองานสร้างกราฟอย่างง่าย[3]
ส่วน pylab เป็นส่วนติดต่อที่รวมคำสั่งจาก Matplotlib กับ NumPy เพื่อให้คล้าย MATLAB มากยิ่งขึ้น แต่ปัจจุบันไม่แนะนำให้ใช้ในโค้ดใหม่ เพราะทำให้ namespace ปะปนและทำให้โค้ดอ่านยากกว่าแนวทาง import numpy as np และ import matplotlib.pyplot as plt[10]
ความสัมพันธ์กับ NumPy, SciPy และ pandas
[แก้]Matplotlib ใช้ NumPy เป็นฐานสำหรับข้อมูลเชิงตัวเลข ผู้ใช้มักส่งอาร์เรย์ของ NumPy เข้าไปยังฟังก์ชันวาดกราฟโดยตรง เช่น ax.plot(x, y) หรือ ax.imshow(image) เอกสารประวัติของ Matplotlib ระบุว่าไลบรารีใช้ NumPy และโค้ดส่วนขยายเพื่อให้ทำงานกับอาร์เรย์ขนาดใหญ่ได้ดี[4]
ในระบบนิเวศ SciPy, Matplotlib ทำหน้าที่เป็นเครื่องมือแสดงผลหลักสำหรับข้อมูลที่คำนวณจาก NumPy, SciPy, scikit-learn และไลบรารีอื่น แม่แบบ SciPy ecosystem จึงมักจัด Matplotlib ไว้คู่กับ NumPy, SciPy, pandas, IPython, SymPy และ scikit-learn ในฐานะเครื่องมือหลักของ scientific Python[11]
pandas มีเมทอด DataFrame.plot และ Series.plot ที่ใช้ Matplotlib เป็น backend พื้นฐานในหลายกรณี ทำให้ผู้ใช้สามารถสร้างกราฟจากตารางข้อมูลได้โดยไม่ต้องเขียนโค้ด Matplotlib โดยตรงมากนัก ขณะที่ seaborn เป็นไลบรารีระดับสูงที่สร้างบน Matplotlib และเน้นกราฟเชิงสถิติพร้อมค่าเริ่มต้นที่สวยงามกว่า
การใช้งานในวิทยาศาสตร์และการศึกษา
[แก้]Matplotlib ถูกใช้กว้างในงานวิจัย การศึกษา วิศวกรรม วิทยาศาสตร์ข้อมูล และการสื่อสารผลการวิเคราะห์ ตัวอย่างหนึ่งคือความร่วมมือ Event Horizon Telescope ซึ่งใช้เครื่องมือในระบบนิเวศไพทอนรวมถึง NumPy และ Matplotlib ในกระบวนการสร้างภาพและวิเคราะห์ข้อมูลของภาพหลุมดำภาพแรก[12]
ใน ค.ศ. 2024 NASA ให้ทุน 15.6 ล้านดอลลาร์สหรัฐแก่โครงการโอเพนซอร์ส 15 โครงการที่เป็นเครื่องมือสำคัญของชุมชนวิทยาศาสตร์ และ Matplotlib เป็นหนึ่งในเครื่องมือที่ได้รับการอ้างถึงในบริบทการสนับสนุนซอฟต์แวร์วิทยาศาสตร์โอเพนซอร์สที่ใช้แพร่หลายในงานของ NASA[13]
ในการศึกษา Matplotlib มักใช้สอนการเขียนโปรแกรม การวิเคราะห์ข้อมูล และการสร้างภาพข้อมูล เพราะติดตั้งง่าย มีตัวอย่างจำนวนมาก และทำงานกับ Jupyter Notebook ได้ดี Jupyter ทำให้ผู้เรียนสามารถเขียนโค้ด วิเคราะห์ข้อมูล และดูกราฟในเอกสารเดียวกัน ซึ่งเหมาะกับการเรียนการสอนและงานวิจัยแบบทำซ้ำได้[14]
เครื่องมือขยายและโครงการที่เกี่ยวข้อง
[แก้]Matplotlib มีเครื่องมือขยายและไลบรารีที่เกี่ยวข้องจำนวนมาก บางส่วนรวมอยู่ใน Matplotlib เอง เช่น mplot3d สำหรับกราฟสามมิติ ส่วนบางส่วนเป็นไลบรารีภายนอกที่ใช้ Matplotlib เป็นฐานหรือทำงานร่วมกันได้ เช่น:
- seaborn ไลบรารีสร้างกราฟเชิงสถิติระดับสูงบน Matplotlib
- Cartopy เครื่องมือสร้างแผนที่และแปลงพิกัดภูมิศาสตร์
- pandas plotting เมทอดสร้างกราฟจาก DataFrame และ Series
- mplfinance สำหรับกราฟทางการเงิน
- mpld3 สำหรับแปลงกราฟ Matplotlib ไปเป็นภาพแบบโต้ตอบบนเว็บ
- SciencePlots หรือ style package อื่น ๆ สำหรับปรับรูปแบบภาพให้เหมาะกับงานตีพิมพ์
- SageMath ซึ่งใช้ Matplotlib ในการวาดกราฟบางส่วน
เครื่องมือบางชนิดที่เคยปรากฏในบทความเก่า เช่น Basemap ยังมีอยู่ในประวัติของชุมชน แต่โดยทั่วไปแนะนำให้ใช้ Cartopy หรือเครื่องมือภูมิสารสนเทศสมัยใหม่แทน Basemap ในงานใหม่ เพราะ Basemap ถูกจัดเป็นเครื่องมือเก่ากว่าและไม่ใช่แนวทางหลักของระบบนิเวศปัจจุบัน
ข้อจำกัดและเสียงวิจารณ์
[แก้]Matplotlib มีพลังและยืดหยุ่นสูง แต่ก็ถูกวิจารณ์ว่ามี API หลายระดับ ทำให้ผู้เริ่มต้นสับสนระหว่าง pyplot, รูปแบบเชิงวัตถุ, backend, artist และ rcParams โค้ดง่าย ๆ อาจสั้นมาก แต่เมื่อกราฟซับซ้อน ผู้ใช้ต้องเข้าใจโครงสร้างภายในของ Matplotlib มากขึ้น
อีกข้อจำกัดคือกราฟเชิงโต้ตอบบนเว็บของ Matplotlib ไม่ใช่จุดแข็งหลักเมื่อเทียบกับไลบรารีอย่าง Plotly, Bokeh หรือ Altair ซึ่งออกแบบมาสำหรับเว็บและการโต้ตอบโดยตรง อย่างไรก็ตาม Matplotlib ยังแข็งแกร่งในงานสร้างภาพคุณภาพสูงสำหรับสิ่งพิมพ์ ไฟล์ PDF/SVG/PNG และการใช้งานภายในระบบวิทยาศาสตร์ไพทอน
ตัวอย่างโค้ด
[แก้]ตัวอย่างกราฟเส้นพื้นฐาน:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y, label="sin(x)")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend()
plt.show()
ตัวอย่างฮิสโทแกรม:
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(0)
data = rng.normal(size=1000)
fig, ax = plt.subplots()
ax.hist(data, bins=30)
ax.set_title("Histogram")
plt.show()
ตัวอย่างภาพข้อมูลสองมิติ:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 200)
y = np.linspace(-3, 3, 200)
X, Y = np.meshgrid(x, y)
Z = np.exp(-(X**2 + Y**2))
fig, ax = plt.subplots()
image = ax.imshow(Z, extent=[-3, 3, -3, 3], origin="lower")
fig.colorbar(image, ax=ax)
plt.show()
ดูเพิ่ม
[แก้]อ้างอิง
[แก้]- 1 2 3 "Matplotlib: Visualization with Python". Matplotlib development team. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 "Quick start guide". Matplotlib development team. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 3 "matplotlib.pyplot". Matplotlib development team. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- 1 2 3 4 5 "History". Matplotlib development team. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "Sponsored Projects". NumFOCUS. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "matplotlib". Python Package Index. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "Matplotlib 3.11.0 documentation". Matplotlib development team. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "Backends". Matplotlib development team. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "Examples". Matplotlib development team. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "API Reference". Matplotlib development team. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "SciPy.org". SciPy community. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "Case Study: First Image of a Black Hole". NumPy. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "NASA Funds Open-Source Software Underpinning Scientific Innovation". NASA. 24 ตุลาคม 2024. สืบค้นเมื่อ 8 กรกฎาคม 2026.
- ↑ "Interactive notebooks: Sharing the code". Nature. 18 กันยายน 2018. สืบค้นเมื่อ 8 กรกฎาคม 2026.
อ่านเพิ่ม
[แก้]- VanderPlas, Jake (2016). Python Data Science Handbook: Essential Tools for Working with Data. O'Reilly. ISBN 978-1491912058.
- McKinney, Wes (2022). Python for Data Analysis (3rd ed.). O'Reilly. ISBN 978-1098104030.
แหล่งข้อมูลอื่น
[แก้]
วิกิมีเดียคอมมอนส์มีสื่อเกี่ยวกับ Matplotlib
- เว็บไซต์ทางการ
- แกลเลอรีตัวอย่าง Matplotlib
- บทเรียน Matplotlib
- ซอร์สโค้ด Matplotlib บน GitHub
- Matplotlib บน Python Package Index


