Matplotlib เป็นไลบรารีของภาษาไพทอนสำหรับสร้างภาพข้อมูล แผนภูมิ และกราฟ ทั้งแบบคงที่ เคลื่อนไหว และโต้ตอบได้ เอกสารทางการอธิบาย Matplotlib ว่าเป็นไลบรารีครบเครื่องสำหรับสร้าง static, animated และ interactive visualizations ในไพทอน ไลบรารีนี้ใช้ร่วมกับNumPyอย่างใกล้ชิด และเป็นองค์ประกอบสำคัญของระบบนิเวศไพทอนด้านการคำนวณเชิงวิทยาศาสตร์ร่วมกับ SciPy, pandas, Jupyter และ scikit-learn
Matplotlib สร้างกราฟได้หลายชนิด เช่น กราฟเส้น แผนภูมิแท่ง ฮิสโทแกรม แผนภาพกระจาย กราฟคอนทัวร์ ภาพข้อมูล กราฟสามมิติ และกราฟเชิงสถิติพื้นฐาน จุดเด่นของไลบรารีคือความยืดหยุ่นสูง สามารถใช้แบบง่ายผ่านโมดูล pyplot ที่คล้าย MATLAB หรือใช้แบบเชิงวัตถุผ่าน Figure และ Axes เพื่อควบคุมองค์ประกอบของกราฟอย่างละเอียด
Matplotlib เริ่มพัฒนาโดยจอห์น ดี. ฮันเตอร์ใน ค.ศ. 2003 เพื่อให้ชุมชนวิทยาศาสตร์ไพทอนมีเครื่องมือสร้างกราฟที่ใช้งานคล้าย MATLAB แต่เป็นโอเพนซอร์สและทำงานร่วมกับไพทอนได้เต็มที่ ปัจจุบันโครงการพัฒนาโดยชุมชนและเป็นโครงการที่ได้รับการสนับสนุนทางการเงินผ่าน NumFOCUS รุ่นเสถียรล่าสุดคือ 3.11.0 เผยแพร่เมื่อวันที่ 12 มิถุนายน ค.ศ. 2026 ตาม PyPI และเอกสาร stable ของโครงการ
ชื่อ
ชื่อ Matplotlib มาจากการผสมคำว่า MATLAB, plot และ library สะท้อนเป้าหมายเดิมของโครงการที่ต้องการให้ผู้ใช้ไพทอนสร้างกราฟได้ในรูปแบบคุ้นเคยกับ MATLAB แต่ไม่ต้องพึ่งซอฟต์แวร์เชิงพาณิชย์ ชื่อแพ็กเกจบน Python Package Index คือ matplotlib และธรรมเนียมการใช้งานทั่วไปคือ:
import matplotlib.pyplot as plt
ในภาษาไทย บทความนี้ใช้ชื่อ “Matplotlib” ตามชื่อทางการของโครงการ และใช้คำว่า “ไลบรารีสร้างกราฟ” หรือ “ไลบรารีแสดงข้อมูลเป็นภาพ” เพื่ออธิบายหน้าที่ของซอฟต์แวร์
ประวัติ
Matplotlib เกิดจากความต้องการของนักวิทยาศาสตร์และวิศวกรที่ใช้ไพทอนในการคำนวณเชิงตัวเลข แต่ยังขาดเครื่องมือสร้างกราฟคุณภาพดีที่เชื่อมกับ NumPy ได้อย่างเป็นธรรมชาติ จอห์น ดี. ฮันเตอร์เริ่มพัฒนาไลบรารีนี้ใน ค.ศ. 2003 โดยตั้งใจให้ผู้ใช้สามารถสร้างกราฟแบบ MATLAB ได้ แต่ยังคงความสามารถของไพทอนในฐานะภาษาโปรแกรมทั่วไป
เอกสารประวัติของโครงการระบุว่า Matplotlib มีรากจากการเลียนแบบคำสั่งกราฟิกของ MATLAB แต่เป็นอิสระจาก MATLAB และสามารถใช้ในแนวทางแบบไพทอนและเชิงวัตถุได้ โครงการเขียนด้วยไพทอนเป็นหลัก แต่ใช้ NumPy และโค้ดส่วนขยายอื่นเพื่อให้ทำงานกับอาร์เรย์ขนาดใหญ่ได้อย่างมีประสิทธิภาพ
หลังการเสียชีวิตของฮันเตอร์ใน ค.ศ. 2012 โครงการยังคงพัฒนาโดยชุมชน Michael Droettboom และ Thomas Caswell มีบทบาทสำคัญในช่วงต่อมา และโครงการเติบโตเป็นซอฟต์แวร์พื้นฐานของ scientific Python ตั้งแต่คริสต์ทศวรรษ 2010 เป็นต้นมา Matplotlib ไม่ได้เป็นเพียงเครื่องมือวาดกราฟโดยตรง แต่ยังเป็น backend หรือรากฐานให้ไลบรารีระดับสูงจำนวนมาก เช่น pandas และ seaborn ใช้สร้างภาพข้อมูล
สถาปัตยกรรมและแนวคิดการใช้งาน
Matplotlib มีแนวคิดหลักคือการแยก “รูปภาพ” ออกจาก “แกนกราฟ” และองค์ประกอบย่อย ภาพหนึ่งภาพอยู่ในวัตถุ Figure ส่วนพื้นที่กราฟหรือแผนภูมิอยู่ในวัตถุ Axes ผู้ใช้สามารถสร้างรูปและแกนด้วย plt.subplots() แล้วเรียกเมทอดของ Axes เพื่อวาดข้อมูล เช่น plot, scatter, bar หรือ imshow
ตัวอย่างการใช้งานแบบเชิงวัตถุ:
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 สำหรับการใช้งานแบบโต้ตอบและงานง่าย ๆ อย่างไรก็ตาม เอกสารสมัยใหม่มักแนะนำให้ใช้รูปแบบเชิงวัตถุเมื่อกราฟซับซ้อน มีหลายแกน หรือต้องเขียนโค้ดที่ดูแลรักษาได้ง่าย
Backend และการแสดงผล
Matplotlib แยกส่วนการสร้างกราฟออกจาก backend ที่ใช้แสดงหรือบันทึกผลลัพธ์ Backend คือชั้นซอฟต์แวร์ที่รับคำสั่งวาดภาพแล้วแสดงบนหน้าจอ บันทึกเป็นไฟล์ หรือฝังในแอปพลิเคชัน ผู้ใช้จึงสามารถใช้ Matplotlib ในสคริปต์ไพทอน, Python shell, Jupyter Notebook, เว็บแอปพลิเคชัน หรือโปรแกรมที่มี GUI ได้
Matplotlib รองรับ backend หลายแบบ เช่น Agg สำหรับการเรนเดอร์เป็นภาพ raster, PDF, SVG และ PS สำหรับงานส่งออกเอกสาร รวมถึง backend แบบโต้ตอบที่เชื่อมกับ GUI toolkit เช่น Qt, Tk, GTK และ wxPython ความสามารถนี้ทำให้ Matplotlib ใช้ได้ทั้งในงานวิจัยที่ต้องการภาพคุณภาพตีพิมพ์และในโปรแกรมที่ต้องฝังกราฟไว้ในส่วนติดต่อผู้ใช้
ประเภทกราฟและตัวอย่างภาพ





Matplotlib สามารถสร้างภาพข้อมูลได้หลายแบบ ตั้งแต่กราฟพื้นฐานจนถึงภาพเชิงคณิตศาสตร์และวิทยาศาสตร์ที่ซับซ้อน ตัวอย่างในแกลเลอรีทางการมีทั้งกราฟเส้น แผนภูมิแท่ง แผนภาพกระจาย ฮิสโทแกรม box plot, errorbar, contour, heatmap, image, polar plot, 3D plot และกราฟแบบกำหนดแกนหรือ layout ซับซ้อน
pyplot และ pylab
matplotlib.pyplot เป็นโมดูลที่นิยมใช้มากที่สุดของ Matplotlib เพราะมีคำสั่งสั้นและคล้าย MATLAB เช่น plot, scatter, hist, imshow และ show เอกสารทางการอธิบายว่า pyplot เป็น state-based interface ที่ให้วิธีวาดกราฟแบบ MATLAB-like และเหมาะกับกราฟโต้ตอบหรืองานสร้างกราฟอย่างง่าย
ส่วน pylab เป็นส่วนติดต่อที่รวมคำสั่งจาก Matplotlib กับ NumPy เพื่อให้คล้าย MATLAB มากยิ่งขึ้น แต่ปัจจุบันไม่แนะนำให้ใช้ในโค้ดใหม่ เพราะทำให้ namespace ปะปนและทำให้โค้ดอ่านยากกว่าแนวทาง import numpy as np และ import matplotlib.pyplot as plt
ความสัมพันธ์กับ NumPy, SciPy และ pandas
Matplotlib ใช้ NumPy เป็นฐานสำหรับข้อมูลเชิงตัวเลข ผู้ใช้มักส่งอาร์เรย์ของ NumPy เข้าไปยังฟังก์ชันวาดกราฟโดยตรง เช่น ax.plot(x, y) หรือ ax.imshow(image) เอกสารประวัติของ Matplotlib ระบุว่าไลบรารีใช้ NumPy และโค้ดส่วนขยายเพื่อให้ทำงานกับอาร์เรย์ขนาดใหญ่ได้ดี
ในระบบนิเวศ SciPy, Matplotlib ทำหน้าที่เป็นเครื่องมือแสดงผลหลักสำหรับข้อมูลที่คำนวณจาก NumPy, SciPy, scikit-learn และไลบรารีอื่น แม่แบบ SciPy ecosystem จึงมักจัด Matplotlib ไว้คู่กับ NumPy, SciPy, pandas, IPython, SymPy และ scikit-learn ในฐานะเครื่องมือหลักของ scientific Python
pandas มีเมทอด DataFrame.plot และ Series.plot ที่ใช้ Matplotlib เป็น backend พื้นฐานในหลายกรณี ทำให้ผู้ใช้สามารถสร้างกราฟจากตารางข้อมูลได้โดยไม่ต้องเขียนโค้ด Matplotlib โดยตรงมากนัก ขณะที่ seaborn เป็นไลบรารีระดับสูงที่สร้างบน Matplotlib และเน้นกราฟเชิงสถิติพร้อมค่าเริ่มต้นที่สวยงามกว่า
การใช้งานในวิทยาศาสตร์และการศึกษา
Matplotlib ถูกใช้กว้างในงานวิจัย การศึกษา วิศวกรรม วิทยาศาสตร์ข้อมูล และการสื่อสารผลการวิเคราะห์ ตัวอย่างหนึ่งคือความร่วมมือ Event Horizon Telescope ซึ่งใช้เครื่องมือในระบบนิเวศไพทอนรวมถึง NumPy และ Matplotlib ในกระบวนการสร้างภาพและวิเคราะห์ข้อมูลของภาพหลุมดำภาพแรก
ใน ค.ศ. 2024 NASA ให้ทุน 15.6 ล้านดอลลาร์สหรัฐแก่โครงการโอเพนซอร์ส 15 โครงการที่เป็นเครื่องมือสำคัญของชุมชนวิทยาศาสตร์ และ Matplotlib เป็นหนึ่งในเครื่องมือที่ได้รับการอ้างถึงในบริบทการสนับสนุนซอฟต์แวร์วิทยาศาสตร์โอเพนซอร์สที่ใช้แพร่หลายในงานของ NASA
ในการศึกษา Matplotlib มักใช้สอนการเขียนโปรแกรม การวิเคราะห์ข้อมูล และการสร้างภาพข้อมูล เพราะติดตั้งง่าย มีตัวอย่างจำนวนมาก และทำงานกับ Jupyter Notebook ได้ดี Jupyter ทำให้ผู้เรียนสามารถเขียนโค้ด วิเคราะห์ข้อมูล และดูกราฟในเอกสารเดียวกัน ซึ่งเหมาะกับการเรียนการสอนและงานวิจัยแบบทำซ้ำได้
เครื่องมือขยายและโครงการที่เกี่ยวข้อง
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()
ดูเพิ่ม
- NumPy
- SciPy
- Pandas (ซอฟต์แวร์)
- Jupyter
- seaborn
- Plotly
- การแสดงข้อมูลเป็นภาพ
- ซอฟต์แวร์สร้างกราฟ
- MATLAB
