Matplotlib - Hướng dẫn nhanh
Matplotlib là một trong những gói Python phổ biến nhất được sử dụng để trực quan hóa dữ liệu. Nó là một thư viện đa nền tảng để tạo các đồ thị 2D từ dữ liệu trong các mảng. Matplotlib được viết bằng Python và sử dụng NumPy, phần mở rộng toán học số của Python. Nó cung cấp một API hướng đối tượng giúp nhúng các lô trong các ứng dụng sử dụng bộ công cụ GUI Python như PyQt, WxPythonotTkinter. Nó có thể được sử dụng trong Python và IPython shell, máy tính xách tay Jupyter và máy chủ ứng dụng web.
Matplotlib có một giao diện thủ tục được đặt tên là Pylab, được thiết kế giống với MATLAB, một ngôn ngữ lập trình độc quyền được phát triển bởi MathWorks. Matplotlib cùng với NumPy có thể được coi là mã nguồn mở tương đương với MATLAB.
Matplotlib ban đầu được viết bởi John D. Hunter vào năm 2003. Phiên bản ổn định hiện tại là 2.2.0 được phát hành vào tháng 1 năm 2018.
Matplotlib và các gói phụ thuộc của nó có sẵn ở dạng gói bánh xe trên kho lưu trữ gói Python tiêu chuẩn và có thể được cài đặt trên hệ thống Windows, Linux cũng như MacOS bằng trình quản lý gói pip.
pip3 install matplotlib
Trong trường hợp các phiên bản Python 2.7 hoặc 3.4 không được cài đặt cho tất cả người dùng, các gói có thể phân phối lại của Microsoft Visual C ++ 2008 (64 bit hoặc 32 bit choPython 2.7) hoặc Microsoft Visual C ++ 2010 (64 bit hoặc 32 bit cho Python 3.4) cần được cài đặt.
Nếu bạn đang sử dụng Python 2.7 trên máy Mac, hãy thực hiện lệnh sau:
xcode-select –install
Khi thực hiện lệnh trên, quy trình con32 - một phần phụ thuộc, có thể được biên dịch.
Trên các phiên bản Linux và Python 2.7 cực kỳ cũ, bạn có thể cần cài đặt phiên bản chính của subprocess32.
Matplotlib yêu cầu một số lượng lớn các phụ thuộc -
- Python (> = 2.7 hoặc> = 3.4)
- NumPy
- setuptools
- dateutil
- pyparsing
- libpng
- pytz
- FreeType
- cycler
- six
Theo tùy chọn, bạn cũng có thể cài đặt một số gói để kích hoạt các bộ công cụ giao diện người dùng tốt hơn.
- tk
- PyQt4
- PyQt5
- pygtk
- wxpython
- pycairo
- Tornado
Để được hỗ trợ tốt hơn cho định dạng đầu ra hoạt ảnh và các định dạng tệp hình ảnh, LaTeX, v.v., bạn có thể cài đặt phần sau:
- _mpeg/avconv
- ImageMagick
- Gối (> = 2.0)
- LaTeX và GhostScript (để kết xuất văn bản bằng LaTeX).
- LaTeX và GhostScript (để kết xuất văn bản bằng LaTeX).
Anaconda là bản phân phối mã nguồn mở và miễn phí của các ngôn ngữ lập trình Python và R để xử lý dữ liệu quy mô lớn, phân tích dự đoán và tính toán khoa học. Việc phân phối làm cho việc quản lý và triển khai gói trở nên đơn giản và dễ dàng. Matplotlib và rất nhiều công cụ khoa học (dữ liệu) hữu ích khác tạo thành một phần của bản phân phối. Các phiên bản gói được quản lý bởi hệ thống quản lý gói Conda. Ưu điểm của Anaconda là bạn có quyền truy cập vào hơn 720 gói có thể dễ dàng cài đặt với Conda của Anaconda, một trình quản lý gói, phụ thuộc và môi trường.
Phân phối Anaconda có sẵn để cài đặt tại https://www.anaconda.com/download/. Để cài đặt trên Windows, các tệp nhị phân 32 và 64 bit có sẵn -
https://repo.continuum.io/archive/Anaconda3-5.1.0-Windows-x86.exe
https://repo.continuum.io/archive/Anaconda3-5.1.0-Windows-x86_64.exe
Cài đặt là một quá trình dựa trên thuật sĩ khá đơn giản. Bạn có thể chọn giữa việc thêm Anaconda trong biến PATH và đăng ký Anaconda làm Python mặc định của mình.
Để cài đặt trên Linux, hãy tải xuống trình cài đặt cho trình cài đặt 32 bit và 64 bit từ trang tải xuống -
https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86.sh
https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh
Bây giờ, hãy chạy lệnh sau từ thiết bị đầu cuối Linux:
$ bash Anaconda3-5.0.1-Linux-x86_64.sh
Canopy và ActiveState là những lựa chọn được tìm kiếm nhiều nhất cho Windows, macOS và các nền tảng Linux phổ biến. Người dùng Windows có thể tìm thấy một tùy chọn trong WinPython.
Jupyter là một từ viết tắt rời có nghĩa là Julia, Python và R. Các ngôn ngữ lập trình này là ngôn ngữ đích đầu tiên của ứng dụng Jupyter, nhưng ngày nay, công nghệ máy tính xách tay cũng hỗ trợ nhiều ngôn ngữ khác.
Năm 2001, Fernando Pérez bắt đầu phát triển Ipython. IPython là một trình bao lệnh cho tính toán tương tác bằng nhiều ngôn ngữ lập trình, ban đầu được phát triển cho Python.
Hãy xem xét các tính năng sau do IPython cung cấp:
Vỏ tương tác (thiết bị đầu cuối và dựa trên Qt).
Một sổ ghi chép dựa trên trình duyệt hỗ trợ mã, văn bản, biểu thức toán học, biểu đồ nội tuyến và các phương tiện khác.
Hỗ trợ trực quan hóa dữ liệu tương tác và sử dụng bộ công cụ GUI.
Trình thông dịch linh hoạt, có thể nhúng để tải vào các dự án của riêng mình.
Vào năm 2014, Fernando Pérez đã công bố một dự án phụ từ IPython có tên là Project Jupyter. IPython sẽ tiếp tục tồn tại dưới dạng trình bao Python và hạt nhân cho Jupyter, trong khi sổ ghi chép và các phần không thể sử dụng ngôn ngữ khác của IPython sẽ chuyển dưới tên Jupyter. Jupyter đã thêm hỗ trợ cho Julia, R, Haskell và Ruby.
Để khởi động sổ ghi chép Jupyter, hãy mở điều hướng Anaconda (giao diện người dùng đồ họa trên máy tính để bàn có trong Anaconda cho phép bạn khởi chạy ứng dụng và dễ dàng quản lý các gói, môi trường và kênh Conda mà không cần sử dụng các lệnh dòng lệnh).
Navigator hiển thị các thành phần được cài đặt trong bản phân phối.
Khởi chạy Máy tính xách tay Jupyter từ Bộ điều hướng -
Bạn sẽ thấy ứng dụng đang mở trong trình duyệt web trên địa chỉ sau: http://localhost:8888.
Bạn có thể muốn bắt đầu bằng cách tạo một sổ ghi chép mới. Bạn có thể dễ dàng thực hiện việc này bằng cách nhấp vào "Nút mới" trong "tab Tệp". Bạn thấy rằng bạn có tùy chọn để tạo một tệp văn bản thông thường, một thư mục và một thiết bị đầu cuối. Cuối cùng, bạn cũng sẽ thấy tùy chọn tạo sổ ghi chép Python 3.
Một sổ tay mới không có tiêu đề với .ipynbtiện ích mở rộng (là viết tắt của IPython notebook) được hiển thị trong tab mới của trình duyệt.
matplotlib.pyplotlà một tập hợp các hàm kiểu lệnh làm cho Matplotlib hoạt động giống như MATLAB. Mỗi hàm Pyplot thực hiện một số thay đổi đối với một hình. Ví dụ: một hàm tạo một hình, vùng vẽ đồ thị trong một hình, vẽ một số đường trong vùng vẽ đồ thị, trang trí đồ thị bằng nhãn, v.v.
Các loại lô đất
Sr.No | Mô tả chức năng |
---|---|
1 | Bar Thực hiện một âm mưu thanh. |
2 | Barh Vẽ biểu đồ thanh ngang. |
3 | Boxplot Làm một cái hộp và âm mưu râu ria. |
4 | Hist Vẽ biểu đồ. |
5 | hist2d Vẽ biểu đồ 2D. |
6 | Pie Vẽ biểu đồ hình tròn. |
7 | Plot Vẽ các đường và / hoặc điểm đánh dấu cho Axes. |
số 8 | Polar Thực hiện một âm mưu cực .. |
9 | Scatter Lập biểu đồ phân tán của x vs y. |
10 | Stackplot Vẽ một biểu đồ khu vực xếp chồng lên nhau. |
11 | Stem Tạo một sơ đồ gốc. |
12 | Step Lập sơ đồ từng bước. |
13 | Quiver Vẽ một trường mũi tên 2-D. |
Chức năng hình ảnh
Sr.No | Mô tả chức năng |
---|---|
1 | Imread Đọc một hình ảnh từ một tệp vào một mảng. |
2 | Imsave Lưu một mảng dưới dạng tệp hình ảnh. |
3 | Imshow Hiển thị một hình ảnh trên các trục. |
Chức năng trục
Sr.No | Mô tả chức năng |
---|---|
1 | Axes Thêm các trục vào hình. |
2 | Text Thêm văn bản vào các trục. |
3 | Title Đặt tiêu đề của các trục hiện tại. |
4 | Xlabel Đặt nhãn trục x của trục hiện tại. |
5 | Xlim Lấy hoặc đặt giới hạn x của các trục hiện tại. |
6 | Xscale . |
7 | Xticks Nhận hoặc đặt giới hạn x của các vị trí và nhãn đánh dấu hiện tại. |
số 8 | Ylabel Đặt nhãn trục y của trục hiện tại. |
9 | Ylim Nhận hoặc đặt giới hạn y của các trục hiện tại. |
10 | Yscale Đặt tỷ lệ của trục y. |
11 | Yticks Nhận hoặc đặt giới hạn y của các vị trí và nhãn đánh dấu hiện tại. |
Chức năng Hình
Sr.No | Mô tả chức năng |
---|---|
1 | Figtext Thêm văn bản vào hình. |
2 | Figure Tạo ra một nhân vật mới. |
3 | Show Hiển thị một con số. |
4 | Savefig Lưu con số hiện tại. |
5 | Close Đóng cửa sổ hình. |
Trong chương này, chúng ta sẽ học cách tạo một cốt truyện đơn giản với Matplotlib.
Bây giờ chúng ta sẽ hiển thị một biểu đồ góc đơn giản tính bằng radian so với giá trị sin của nó trong Matplotlib. Để bắt đầu, mô-đun Pyplot từ gói Matplotlib được nhập, với bí danh plt như một vấn đề quy ước.
import matplotlib.pyplot as plt
Tiếp theo, chúng ta cần một mảng số để vẽ. Các hàm mảng khác nhau được định nghĩa trong thư viện NumPy được nhập với bí danh np.
import numpy as np
Bây giờ chúng ta có được đối tượng ndarray có góc từ 0 đến 2π bằng cách sử dụng hàm arange () từ thư viện NumPy.
x = np.arange(0, math.pi*2, 0.05)
Đối tượng ndarray đóng vai trò là các giá trị trên trục x của biểu đồ. Giá trị sin tương ứng của các góc trong x được hiển thị trên trục y thu được bằng câu lệnh sau:
y = np.sin(x)
Các giá trị từ hai mảng được vẽ bằng hàm plot ().
plt.plot(x,y)
Bạn có thể đặt tiêu đề và nhãn cho trục x và y.
You can set the plot title, and labels for x and y axes.
plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')
Cửa sổ Trình xem lô được gọi bởi hàm show () -
plt.show()
Chương trình hoàn chỉnh như sau:
from matplotlib import pyplot as plt
import numpy as np
import math #needed for definition of pi
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
plt.plot(x,y)
plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')
plt.show()
Khi dòng mã trên được thực thi, biểu đồ sau được hiển thị:
Bây giờ, hãy sử dụng sổ ghi chép Jupyter với Matplotlib.
Khởi chạy sổ ghi chép Jupyter từ trình điều hướng hoặc dòng lệnh Anaconda như được mô tả trước đó. Trong ô đầu vào, hãy nhập câu lệnh nhập cho Pyplot và NumPy -
from matplotlib import pyplot as plt
import numpy as np
Để hiển thị kết quả đầu ra của âm mưu bên trong chính sổ tay (chứ không phải trong trình xem riêng biệt), hãy nhập câu lệnh ma thuật sau:
%matplotlib inline
Lấy x là đối tượng ndarray chứa các góc tính bằng radian từ 0 đến 2π và y là giá trị sin của mỗi góc -
import math
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
Đặt nhãn cho trục x và y cũng như tiêu đề cốt truyện -
plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')
Cuối cùng thực thi hàm plot () để tạo hiển thị sóng sin trong sổ tay (không cần chạy hàm show ()) -
plt.plot(x,y)
Sau khi thực thi dòng mã cuối cùng, kết quả sau được hiển thị:
PyLab là một giao diện thủ tục cho thư viện vẽ đồ thị hướng đối tượng Matplotlib. Matplotlib là toàn bộ gói; matplotlib.pyplot là một mô-đun trong Matplotlib; và PyLab là một mô-đun được cài đặt cùng với Matplotlib.
PyLab là một mô-đun tiện lợi nhập hàng loạt matplotlib.pyplot (để vẽ biểu đồ) và NumPy (cho Toán học và làm việc với mảng) trong một không gian tên duy nhất. Mặc dù nhiều ví dụ sử dụng PyLab nhưng nó không còn được khuyến khích nữa.
Vẽ sơ đồ cơ bản
Vẽ đường cong được thực hiện bằng lệnh plot. Nó cần một cặp mảng (hoặc chuỗi) có cùng độ dài -
from numpy import *
from pylab import *
x = linspace(-3, 3, 30)
y = x**2
plot(x, y)
show()
Dòng mã trên tạo ra kết quả sau:
Để vẽ biểu tượng thay vì dòng, hãy cung cấp đối số chuỗi bổ sung.
ký hiệu | -, -, -.,. ,,, o, ^, v, <,>, s, +, x, D, d, 1, 2, 3, 4, h, H, p, | , _ |
màu sắc | b, g, r, c, m, y, k, w |
Bây giờ, hãy xem xét việc thực thi đoạn mã sau:
from pylab import *
x = linspace(-3, 3, 30)
y = x**2
plot(x, y, 'r.')
show()
Nó vẽ các chấm đỏ như hình dưới đây -
Các lô có thể được phủ lên nhau. Chỉ cần sử dụng nhiều lệnh âm mưu. Sử dụng clf () để xóa âm mưu.
from pylab import *
plot(x, sin(x))
plot(x, cos(x), 'r-')
plot(x, -sin(x), 'g--')
show()
Dòng mã trên tạo ra kết quả sau:
Mặc dù dễ dàng nhanh chóng tạo ra các âm mưu với matplotlib.pyplotmô-đun, việc sử dụng phương pháp tiếp cận hướng đối tượng được khuyến khích vì nó cho phép kiểm soát và tùy chỉnh nhiều hơn các lô của bạn. Hầu hết các chức năng cũng có sẵn trongmatplotlib.axes.Axes lớp học.
Ý tưởng chính đằng sau việc sử dụng phương pháp hướng đối tượng chính thức hơn là tạo các đối tượng hình và sau đó chỉ cần gọi các phương thức hoặc thuộc tính của đối tượng đó. Cách tiếp cận này giúp tốt hơn trong việc xử lý canvas có nhiều ô trên đó.
Trong giao diện hướng đối tượng, Pyplot chỉ được sử dụng cho một số chức năng như tạo hình và người dùng tạo và theo dõi rõ ràng các đối tượng hình và trục. Ở cấp độ này, người dùng sử dụng Pyplot để tạo ra các hình và thông qua các hình đó, một hoặc nhiều đối tượng trục có thể được tạo ra. Các đối tượng trục này sau đó được sử dụng cho hầu hết các hành động vẽ.
Để bắt đầu, chúng ta tạo một ví dụ hình cung cấp một canvas trống.
fig = plt.figure()
Bây giờ thêm các trục vào hình. Cácadd_axes()phương thức yêu cầu một đối tượng danh sách gồm 4 phần tử tương ứng với bên trái, dưới cùng, chiều rộng và chiều cao của hình. Mỗi số phải từ 0 đến 1 -
ax=fig.add_axes([0,0,1,1])
Đặt nhãn cho trục x và y cũng như tiêu đề -
ax.set_title("sine wave")
ax.set_xlabel('angle')
ax.set_ylabel('sine')
Gọi phương thức plot () của đối tượng trục.
ax.plot(x,y)
Nếu bạn đang sử dụng sổ ghi chép Jupyter, chỉ thị nội tuyến% matplotlib phải được ban hành; hàm otherwistshow () của mô-đun pyplot hiển thị biểu đồ.
Xem xét việc thực thi đoạn mã sau:
from matplotlib import pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.plot(x,y)
ax.set_title("sine wave")
ax.set_xlabel('angle')
ax.set_ylabel('sine')
plt.show()
Đầu ra
Dòng mã trên tạo ra kết quả sau:
Mã tương tự khi chạy trong sổ ghi chép Jupyter hiển thị kết quả như hình dưới đây:
Các matplotlib.figuremô-đun chứa lớp Hình. Nó là một vùng chứa cấp cao nhất cho tất cả các phần tử cốt truyện. Đối tượng Hình được khởi tạo bằng cách gọifigure() chức năng từ mô-đun pyplot -
fig = plt.figure()
Bảng sau đây cho thấy các tham số bổ sung:
Figsize | (chiều rộng, chiều cao) tính bằng inch |
Dpi | Dấu chấm trên inch |
Màu mặt | Hình vá màu mặt |
Edgecolor | Hình vá màu cạnh |
Băng thông | Chiều rộng đường cạnh |
Đối tượng Axes là vùng của ảnh với không gian dữ liệu. Một hình nhất định có thể chứa nhiều Trục, nhưng một đối tượng Trục đã cho chỉ có thể nằm trong một Hình. Axes chứa hai (hoặc ba trong trường hợp là 3D) đối tượng Axis. Lớp Axes và các chức năng thành viên của nó là điểm đầu vào chính để làm việc với giao diện OO.
Đối tượng Axes được thêm vào hình bằng cách gọi phương thức add_axes (). Nó trả về đối tượng trục và thêm một trục ở vị trí trực tràng [trái, dưới cùng, chiều rộng, chiều cao] nơi tất cả các đại lượng đều ở dạng nhỏ hơn chiều rộng và chiều cao của hình.
Tham số
Sau đây là tham số cho lớp Axes:
trực tràng - Một chuỗi 4 chiều dài gồm các đại lượng [trái, dưới, rộng, cao].
ax=fig.add_axes([0,0,1,1])
Các hàm thành viên sau của lớp trục thêm các phần tử khác nhau vào biểu đồ:
Huyền thoại
Các legend()phương thức của lớp trục thêm chú giải vào hình vẽ. Nó có ba tham số -
ax.legend(handles, labels, loc)
Trong đó các nhãn là một chuỗi các chuỗi và xử lý một chuỗi các cá thể Line2D hoặc Patch. loc có thể là một chuỗi hoặc một số nguyên xác định vị trí chú giải.
Chuỗi vị trí | Mã vị trí |
---|---|
Tốt | 0 |
phía trên bên phải | 1 |
phía trên bên trái | 2 |
phía dưới bên trái | 3 |
phía dưới bên phải | 4 |
Đúng | 5 |
Chính giữa bên trái | 6 |
Căn giữa bên phải | 7 |
trung tâm thấp hơn | số 8 |
trung tâm trên | 9 |
Trung tâm | 10 |
Axe.plot ()
Đây là phương thức cơ bản của lớp trục vẽ các giá trị của mảng này so với mảng khác dưới dạng dòng hoặc điểm đánh dấu. Phương thức plot () có thể có đối số chuỗi định dạng tùy chọn để chỉ định màu, kiểu và kích thước của dòng và điểm đánh dấu.
Mã màu
Tính cách | Màu sắc |
---|---|
'b' | Màu xanh da trời |
'g' | màu xanh lá |
'r' | Đỏ |
'b' | Màu xanh da trời |
'c' | Lục lam |
'm' | Đỏ tươi |
'y' | Màu vàng |
'k' | Đen |
'b' | Màu xanh da trời |
'w' | trắng |
Mã đánh dấu
Tính cách | Sự miêu tả |
---|---|
'.' | Điểm đánh dấu |
'o' | Điểm đánh dấu vòng tròn |
'x' | Điểm đánh dấu X |
'D' | Điểm đánh dấu kim cương |
'H' | Điểm đánh dấu hình lục giác |
'S' | Điểm đánh dấu hình vuông |
'+' | Điểm đánh dấu cộng |
Các kiểu đường kẻ
Tính cách | Sự miêu tả |
---|---|
'-' | Đường vẽ liền |
'-' | Vạch đứt |
'-.' | Đường chấm gạch ngang |
':' | Đường chấm chấm |
'H' | Điểm đánh dấu hình lục giác |
Ví dụ sau cho thấy chi phí quảng cáo và số liệu bán hàng của TV và điện thoại thông minh dưới dạng biểu đồ đường thẳng. Đường thể hiện TV là đường liền nét với màu vàng và các điểm đánh dấu hình vuông, trong khi dòng điện thoại thông minh là đường đứt nét với màu xanh lá cây và điểm đánh dấu hình tròn.
import matplotlib.pyplot as plt
y = [1, 4, 9, 16, 25,36,49, 64]
x1 = [1, 16, 30, 42,55, 68, 77,88]
x2 = [1,6,12,18,28, 40, 52, 65]
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
l1 = ax.plot(x1,y,'ys-') # solid line with yellow colour and square marker
l2 = ax.plot(x2,y,'go--') # dash line with green colour and circle marker
ax.legend(labels = ('tv', 'Smartphone'), loc = 'lower right') # legend placed at lower right
ax.set_title("Advertisement effect on sales")
ax.set_xlabel('medium')
ax.set_ylabel('sales')
plt.show()
Khi dòng mã trên được thực thi, nó tạo ra âm mưu sau:
Trong chương này, chúng ta sẽ học cách tạo nhiều ô con trên cùng một khung vẽ.
Các subplot()hàm trả về đối tượng trục tại một vị trí lưới nhất định. Chữ ký cuộc gọi của hàm này là -
plt.subplot(subplot(nrows, ncols, index)
Trong hình hiện tại, hàm tạo và trả về một đối tượng Axes, ở chỉ số vị trí của lưới các nrows theo ncolsaxes. Các chỉ mục đi từ 1 đến nrows * ncols, tăng dần theo thứ tự hàng-chính. Nếunrows, ncols và chỉ mục đều nhỏ hơn 10. Các chỉ mục cũng có thể được cung cấp dưới dạng số đơn, nối, threedigitnumber.
Ví dụ: subplot (2, 3, 3) và subplot (233) đều tạo Axes ở góc trên cùng bên phải của hình hiện tại, chiếm một nửa chiều cao hình và một phần ba chiều rộng hình.
Tạo một subplot sẽ xóa mọi subplot tồn tại trước đó chồng lên nó ngoài việc chia sẻ ranh giới.
import matplotlib.pyplot as plt
# plot a line, implicitly creating a subplot(111)
plt.plot([1,2,3])
# now create a subplot which represents the top plot of a grid with 2 rows and 1 column.
#Since this subplot will overlap the first, the plot (and its axes) previously
created, will be removed
plt.subplot(211)
plt.plot(range(12))
plt.subplot(212, facecolor='y') # creates 2nd subplot with yellow background
plt.plot(range(12))
Dòng mã trên tạo ra kết quả sau:
Hàm add_subplot () của lớp figure sẽ không ghi đè lên phần hiện có -
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot([1,2,3])
ax2 = fig.add_subplot(221, facecolor='y')
ax2.plot([1,2,3])
Khi dòng mã trên được thực thi, nó tạo ra kết quả sau:
Bạn có thể thêm một biểu đồ chèn trong cùng một hình bằng cách thêm một đối tượng trục khác trong cùng một khung vẽ.
import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
fig=plt.figure()
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
axes2 = fig.add_axes([0.55, 0.55, 0.3, 0.3]) # inset axes
y = np.sin(x)
axes1.plot(x, y, 'b')
axes2.plot(x,np.cos(x),'r')
axes1.set_title('sine')
axes2.set_title("cosine")
plt.show()
Khi thực thi dòng mã trên, kết quả sau được tạo:
Matplotlib'spyplot API có một hàm tiện lợi được gọi là subplots (), hoạt động như một trình bao bọc tiện ích và giúp tạo các bố cục chung của các subplot, bao gồm cả đối tượng hình bao quanh, trong một lệnh gọi.
Plt.subplots(nrows, ncols)
Hai đối số nguyên cho hàm này chỉ định số hàng và cột của lưới ô ô con. Hàm trả về một đối tượng hình và một bộ chứa các đối tượng trục bằng nrows * ncols. Mỗi đối tượng trục có thể truy cập được bằng chỉ mục của nó. Ở đây chúng tôi tạo một ô con gồm 2 hàng x 2 cột và hiển thị 4 ô khác nhau trong mỗi ô con.
import matplotlib.pyplot as plt
fig,a = plt.subplots(2,2)
import numpy as np
x = np.arange(1,5)
a[0][0].plot(x,x*x)
a[0][0].set_title('square')
a[0][1].plot(x,np.sqrt(x))
a[0][1].set_title('square root')
a[1][0].plot(x,np.exp(x))
a[1][0].set_title('exp')
a[1][1].plot(x,np.log10(x))
a[1][1].set_title('log')
plt.show()
Dòng mã trên tạo ra kết quả sau:
Chức năng này mang lại sự linh hoạt hơn trong việc tạo một đối tượng trục tại một vị trí cụ thể của lưới. Nó cũng cho phép đối tượng trục được kéo dài qua nhiều hàng hoặc cột.
Plt.subplot2grid(shape, location, rowspan, colspan)
Trong ví dụ sau, một lưới 3X3 của đối tượng hình được lấp đầy bởi các đối tượng trục có kích thước khác nhau trong các khoảng hàng và cột, mỗi ô hiển thị một biểu đồ khác nhau.
import matplotlib.pyplot as plt
a1 = plt.subplot2grid((3,3),(0,0),colspan = 2)
a2 = plt.subplot2grid((3,3),(0,2), rowspan = 3)
a3 = plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 2)
import numpy as np
x = np.arange(1,10)
a2.plot(x, x*x)
a2.set_title('square')
a1.plot(x, np.exp(x))
a1.set_title('exp')
a3.plot(x, np.log(x))
a3.set_title('log')
plt.tight_layout()
plt.show()
Khi thực thi mã dòng trên, kết quả sau được tạo:
Hàm lưới () của đối tượng trục đặt khả năng hiển thị của lưới bên trong hình thành bật hoặc tắt. Bạn cũng có thể hiển thị các tích tắc chính / phụ (hoặc cả hai) của lưới. Ngoài ra, các thuộc tính màu, kiểu đường và độ rộng đường thẳng có thể được đặt trong hàm grid ().
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(1,3, figsize = (12,4))
x = np.arange(1,11)
axes[0].plot(x, x**3, 'g',lw=2)
axes[0].grid(True)
axes[0].set_title('default grid')
axes[1].plot(x, np.exp(x), 'r')
axes[1].grid(color='b', ls = '-.', lw = 0.25)
axes[1].set_title('custom grid')
axes[2].plot(x,x)
axes[2].set_title('no grid')
fig.tight_layout()
plt.show()
Đôi khi, một hoặc một vài điểm lớn hơn nhiều so với phần lớn dữ liệu. Trong trường hợp này, tỷ lệ của một trục cần được đặt là logarit thay vì tỷ lệ bình thường. Đây là thang đo Logarit. Trong Matplotlib, có thể bằng cách đặt thuộc tính xscale hoặc vscale của đối tượng trục thành 'log'.
Đôi khi nó cũng được yêu cầu hiển thị một số khoảng cách bổ sung giữa số trục và nhãn trục. Thuộc tính bảng nhãn của một trong hai trục (x hoặc y hoặc cả hai) có thể được đặt thành giá trị mong muốn.
Cả hai tính năng trên đều được chứng minh với sự trợ giúp của ví dụ sau. Ô bên phải có thang đo logarit và ô bên trái có trục x có nhãn ở khoảng cách xa hơn.
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(1, 2, figsize=(10,4))
x = np.arange(1,5)
axes[0].plot( x, np.exp(x))
axes[0].plot(x,x**2)
axes[0].set_title("Normal scale")
axes[1].plot (x, np.exp(x))
axes[1].plot(x, x**2)
axes[1].set_yscale("log")
axes[1].set_title("Logarithmic scale (y)")
axes[0].set_xlabel("x axis")
axes[0].set_ylabel("y axis")
axes[0].xaxis.labelpad = 10
axes[1].set_xlabel("x axis")
axes[1].set_ylabel("y axis")
plt.show()
Gai trục là các đường nối trục đánh dấu phân chia ranh giới khu đất. Đối tượng trục có các gai nằm ở trên, dưới, trái và phải.
Mỗi cột sống có thể được định dạng bằng cách chỉ định màu sắc và chiều rộng. Mọi cạnh có thể được ẩn nếu màu của nó được đặt thành không.
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.spines['bottom'].set_color('blue')
ax.spines['left'].set_color('red')
ax.spines['left'].set_linewidth(2)
ax.spines['right'].set_color(None)
ax.spines['top'].set_color(None)
ax.plot([1,2,3,4,5])
plt.show()
Matplotlib tự động đến các giá trị tối thiểu và tối đa của các biến được hiển thị dọc theo trục x, y (và trục z trong trường hợp biểu đồ 3D) của một biểu đồ. Tuy nhiên, có thể đặt giới hạn rõ ràng bằng cách sử dụngset_xlim() và set_ylim() chức năng.
Trong biểu đồ sau, các giới hạn được tự động chia tỷ lệ của các trục x và y được hiển thị:
import matplotlib.pyplot as plt
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
import numpy as np
x = np.arange(1,10)
a1.plot(x, np.exp(x))
a1.set_title('exp')
plt.show()
Bây giờ chúng tôi định dạng các giới hạn trên trục x thành (0 đến 10) và trục y (0 đến 10000) -
import matplotlib.pyplot as plt
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
import numpy as np
x = np.arange(1,10)
a1.plot(x, np.exp(x),'r')
a1.set_title('exp')
a1.set_ylim(0,10000)
a1.set_xlim(0,10)
plt.show()
Bọ ve là điểm đánh dấu biểu thị các điểm dữ liệu trên các trục. Matplotlib cho đến nay - trong tất cả các ví dụ trước đây của chúng tôi - đã tự động đảm nhận nhiệm vụ tạo khoảng cách các điểm trên trục. Các bộ định vị và định dạng đánh dấu mặc định củaatplotlib được thiết kế để nói chung là đủ trong nhiều trường hợp phổ biến. Vị trí và nhãn của bọ ve có thể được đề cập rõ ràng để phù hợp với các yêu cầu cụ thể.
Các xticks() và yticks()hàm nhận một đối tượng danh sách làm đối số. Các phần tử trong danh sách biểu thị các vị trí trên hành động tương ứng nơi các dấu tích sẽ được hiển thị.
ax.set_xticks([2,4,6,8,10])
Phương pháp này sẽ đánh dấu các điểm dữ liệu tại các vị trí đã cho bằng dấu tích.
Tương tự, các nhãn tương ứng với các dấu tích có thể được đặt bằng set_xlabels() và set_ylabels() các chức năng tương ứng.
ax.set_xlabels([‘two’, ‘four’,’six’, ‘eight’, ‘ten’])
Thao tác này sẽ hiển thị các nhãn văn bản bên dưới các điểm đánh dấu trên trục x.
Ví dụ sau minh họa việc sử dụng bọ ve và nhãn.
import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
y = np.sin(x)
ax.plot(x, y)
ax.set_xlabel(‘angle’)
ax.set_title('sine')
ax.set_xticks([0,2,4,6])
ax.set_xticklabels(['zero','two','four','six'])
ax.set_yticks([-1,0,1])
plt.show()
Nó được coi là hữu ích khi có trục x hoặc y kép trong một hình. Ngoài ra, khi vẽ các đường cong với các đơn vị khác nhau với nhau. Matplotlib hỗ trợ điều này với các hàm twinxand twiny.
Trong ví dụ sau, biểu đồ có trục y kép, một trục hiển thị exp (x) và trục kia hiển thị log (x) -
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
x = np.arange(1,11)
a1.plot(x,np.exp(x))
a1.set_ylabel('exp')
a2 = a1.twinx()
a2.plot(x, np.log(x),'ro-')
a2.set_ylabel('log')
fig.legend(labels = ('exp','log'),loc='upper left')
plt.show()
Biểu đồ thanh hoặc biểu đồ thanh là một biểu đồ hoặc đồ thị trình bày dữ liệu phân loại với các thanh hình chữ nhật có chiều cao hoặc chiều dài tỷ lệ với các giá trị mà chúng đại diện. Các thanh có thể được vẽ theo chiều dọc hoặc chiều ngang.
Biểu đồ thanh hiển thị so sánh giữa các danh mục rời rạc. Một trục của biểu đồ hiển thị các danh mục cụ thể đang được so sánh và trục còn lại thể hiện giá trị đo được.
API Matplotlib cung cấp bar()có thể được sử dụng trong kiểu MATLAB cũng như API hướng đối tượng. Chữ ký của hàm bar () được sử dụng với đối tượng axis như sau:
ax.bar(x, height, width, bottom, align)
Hàm tạo một biểu đồ dạng thanh với hình chữ nhật giới hạn có kích thước (x-width = 2; x + width = 2; bottom; bottom + height).
Các tham số của hàm là -
x | dãy vô hướng biểu diễn tọa độ x của các thanh. căn chỉnh các điều khiển nếu x là tâm thanh (mặc định) hoặc cạnh trái. |
Chiều cao | vô hướng hoặc dãy các đại lượng vô hướng đại diện cho (các) chiều cao của các thanh. |
chiều rộng | vô hướng hoặc dạng mảng, tùy chọn. (các) chiều rộng của các thanh mặc định là 0,8 |
đáy | vô hướng hoặc dạng mảng, tùy chọn. (các) tọa độ y của các thanh mặc định Không có. |
căn chỉnh | {'center', 'edge'}, tùy chọn, mặc định 'center' |
Hàm trả về một đối tượng chứa Matplotlib với tất cả các thanh.
Sau đây là một ví dụ đơn giản về biểu đồ thanh Matplotlib. Nó cho thấy số lượng sinh viên đăng ký cho các khóa học khác nhau được cung cấp tại một viện.
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.bar(langs,students)
plt.show()
Khi so sánh một số đại lượng và khi thay đổi một biến, chúng ta có thể muốn có một biểu đồ thanh nơi chúng ta có các thanh có một màu cho một giá trị đại lượng.
Chúng ta có thể vẽ nhiều biểu đồ thanh bằng cách chơi với độ dày và vị trí của các thanh. Biến dữ liệu chứa ba chuỗi bốn giá trị. Tập lệnh sau sẽ hiển thị ba biểu đồ thanh gồm bốn thanh. Các thanh sẽ có độ dày 0,25 đơn vị. Mỗi biểu đồ thanh sẽ được dịch chuyển 0,25 đơn vị so với biểu đồ trước đó. Đối tượng dữ liệu là một đa chỉ số chứa số lượng sinh viên đã đậu vào ba ngành của một trường cao đẳng kỹ thuật trong bốn năm qua.
import numpy as np
import matplotlib.pyplot as plt
data = [[30, 25, 50, 20],
[40, 23, 51, 17],
[35, 22, 45, 19]]
X = np.arange(4)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(X + 0.00, data[0], color = 'b', width = 0.25)
ax.bar(X + 0.25, data[1], color = 'g', width = 0.25)
ax.bar(X + 0.50, data[2], color = 'r', width = 0.25)
Biểu đồ thanh xếp chồng xếp chồng các thanh đại diện cho các nhóm khác nhau chồng lên nhau. Chiều cao của thanh kết quả hiển thị kết quả tổng hợp của các nhóm.
Tham số dưới cùng tùy chọn của pyplot.bar()cho phép bạn chỉ định giá trị bắt đầu cho một thanh. Thay vì chạy từ 0 đến một giá trị, nó sẽ đi từ dưới cùng đến giá trị. Lệnh gọi đầu tiên tới pyplot.bar () vẽ các thanh màu xanh lam. Lệnh gọi thứ hai tới pyplot.bar () vẽ các thanh màu đỏ, với đáy của các thanh màu xanh nằm trên cùng của các thanh màu đỏ.
import numpy as np
import matplotlib.pyplot as plt
N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
ind = np.arange(N) # the x locations for the groups
width = 0.35
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(ind, menMeans, width, color='r')
ax.bar(ind, womenMeans, width,bottom=menMeans, color='b')
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.set_xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
ax.set_yticks(np.arange(0, 81, 10))
ax.legend(labels=['Men', 'Women'])
plt.show()
Biểu đồ là một đại diện chính xác của sự phân bố dữ liệu số. Nó là một ước lượng của phân phối xác suất của một biến liên tục. Nó là một loại biểu đồ thanh.
Để tạo biểu đồ, hãy làm theo các bước sau:
- Bin phạm vi giá trị.
- Chia toàn bộ phạm vi giá trị thành một loạt các khoảng.
- Đếm xem có bao nhiêu giá trị rơi vào mỗi khoảng.
Các thùng thường được chỉ định là các khoảng liên tiếp, không chồng chéo của một biến.
Các matplotlib.pyplot.hist()hàm vẽ một biểu đồ. Nó tính toán và vẽ biểu đồ của x.
Thông số
Bảng sau liệt kê các tham số cho biểu đồ:
x | mảng hoặc chuỗi các mảng |
thùng | số nguyên hoặc chuỗi hoặc 'tự động', tùy chọn |
thông số tùy chọn | |
phạm vi | Phạm vi dưới và trên của thùng. |
tỉ trọng | Nếu Đúng, phần tử đầu tiên của bộ giá trị trả về sẽ là số đếm được chuẩn hóa để tạo thành mật độ xác suất |
tích lũy | Nếu Đúng, thì biểu đồ được tính toán trong đó mỗi thùng cho số lượng trong thùng đó cộng với tất cả các thùng cho các giá trị nhỏ hơn. |
loại lịch sử | Loại biểu đồ để vẽ. Mặc định là 'bar'
|
Ví dụ sau vẽ biểu đồ về các điểm được học sinh trong một lớp học. Bốn thùng, 0-25, 26-50, 51-75 và 76-100 được xác định. Biểu đồ cho thấy số học sinh rơi vào phạm vi này.
from matplotlib import pyplot as plt
import numpy as np
fig,ax = plt.subplots(1,1)
a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
ax.hist(a, bins = [0,25,50,75,100])
ax.set_title("histogram of result")
ax.set_xticks([0,25,50,75,100])
ax.set_xlabel('marks')
ax.set_ylabel('no. of students')
plt.show()
Cốt truyện xuất hiện như hình dưới đây -
Biểu đồ hình tròn chỉ có thể hiển thị một chuỗi dữ liệu. Biểu đồ hình tròn hiển thị kích thước của các mục (được gọi là nêm) trong một chuỗi dữ liệu, tỷ lệ với tổng của các mục. Các điểm dữ liệu trong biểu đồ hình tròn được hiển thị dưới dạng phần trăm của toàn bộ hình tròn.
API Matplotlib có pie()hàm tạo sơ đồ hình tròn biểu diễn dữ liệu trong một mảng. Diện tích phân đoạn của mỗi cái nêm được cho bởix/sum(x). Nếu sum (x) <1, thì các giá trị của x cung cấp trực tiếp diện tích phân số và mảng sẽ không được chuẩn hóa. Bánh kết quả sẽ có một hình nêm trống có kích thước 1 - sum (x).
Biểu đồ hình tròn trông đẹp nhất nếu hình và trục là hình vuông hoặc khía cạnh Axes bằng nhau.
Thông số
Bảng sau liệt kê các thông số của biểu đồ hình tròn:
x | giống mảng. Các kích thước nêm. |
nhãn mác | danh sách. Một chuỗi các chuỗi cung cấp các nhãn cho mỗi nêm. |
Màu sắc | Một chuỗi các matplotlibcolorargs mà qua đó biểu đồ hình tròn sẽ xoay vòng. Nếu Không, sẽ sử dụng các màu trong chu kỳ hiện đang hoạt động. |
Autopct | chuỗi, được sử dụng để gắn nhãn các nêm với giá trị số của chúng. Nhãn sẽ được đặt bên trong nêm. Chuỗi định dạng sẽ là fmt% pct. |
Đoạn mã sau sử dụng hàm pie () để hiển thị biểu đồ hình tròn danh sách sinh viên đăng ký các khóa học ngôn ngữ máy tính khác nhau. Tỷ lệ phần trăm tương ứng được hiển thị bên trong nêm tương ứng với sự trợ giúp củaautopct tham số được đặt thành% 1.2f%.
from matplotlib import pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.axis('equal')
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.pie(students, labels = langs,autopct='%1.2f%%')
plt.show()
Biểu đồ phân tán được sử dụng để vẽ các điểm dữ liệu trên trục ngang và trục tung nhằm thể hiện mức độ ảnh hưởng của một biến số khác. Mỗi hàng trong bảng dữ liệu được biểu thị bằng một điểm đánh dấu, vị trí phụ thuộc vào giá trị của nó trong các cột được đặt trên trục X và Y. Một biến thứ ba có thể được đặt để tương ứng với màu sắc hoặc kích thước của các điểm đánh dấu, do đó, thêm một chiều khác vào biểu đồ.
Đoạn mã dưới đây vẽ một biểu đồ phân tán của các cấp lớp so với cấp độ của nam và nữ bằng hai màu khác nhau.
import matplotlib.pyplot as plt
girls_grades = [89, 90, 70, 89, 100, 80, 90, 100, 80, 34]
boys_grades = [30, 29, 49, 48, 100, 48, 38, 45, 20, 30]
grades_range = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
ax.scatter(grades_range, girls_grades, color='r')
ax.scatter(grades_range, boys_grades, color='b')
ax.set_xlabel('Grades Range')
ax.set_ylabel('Grades Scored')
ax.set_title('scatter plot')
plt.show()
Đồ thị đường bao (đôi khi được gọi là Đồ thị mức) là một cách để thể hiện một bề mặt ba chiều trên một mặt phẳng hai chiều. Nó vẽ biểu đồ hai biến dự báo XY trên trục y và một biến phản ứng Z dưới dạng đường bao. Những đường bao này đôi khi được gọi là z-slice hoặc giá trị iso-response.
Một đồ thị đường bao là thích hợp nếu bạn muốn xem alue Z thay đổi như thế nào dưới dạng hàm của hai đầu vào X và Y, sao cho Z = f (X, Y). Đường đồng mức hoặc đường cô lập của một hàm hai biến là một đường cong mà hàm có giá trị không đổi.
Các biến độc lập x và y thường được giới hạn trong một lưới thông thường được gọi là meshgrid. Numpy.meshgrid tạo ra một lưới hình chữ nhật từ một mảng các giá trị x và một mảng các giá trị y.
API Matplotlib chứa các hàm contour () và contourf () để vẽ các đường đồng mức và các đường bao đã tô, tương ứng. Cả hai hàm đều cần ba tham số x, y và z.
import numpy as np
import matplotlib.pyplot as plt
xlist = np.linspace(-3.0, 3.0, 100)
ylist = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(xlist, ylist)
Z = np.sqrt(X**2 + Y**2)
fig,ax=plt.subplots(1,1)
cp = ax.contourf(X, Y, Z)
fig.colorbar(cp) # Add a colorbar to a plot
ax.set_title('Filled Contours Plot')
#ax.set_xlabel('x (cm)')
ax.set_ylabel('y (cm)')
plt.show()
Biểu đồ rung hiển thị vectơ vận tốc dưới dạng mũi tên với các thành phần (u, v) tại các điểm (x, y).
quiver(x,y,u,v)
Lệnh trên vẽ các vectơ dưới dạng mũi tên tại các tọa độ được chỉ định trong từng cặp phần tử tương ứng trong x và y.
Thông số
Bảng sau liệt kê các thông số khác nhau cho âm mưu Quiver:
x | Mảng 1D hoặc 2D, dãy. Tọa độ x của các vị trí mũi tên |
y | Mảng 1D hoặc 2D, dãy. Tọa độ y của các vị trí mũi tên |
u | Mảng 1D hoặc 2D, dãy. Các thành phần x của vectơ mũi tên |
v | Mảng 1D hoặc 2D, dãy. Các thành phần y của vectơ mũi tên |
c | Mảng 1D hoặc 2D, dãy. Màu sắc mũi tên |
Đoạn mã sau đây vẽ một biểu đồ rung động đơn giản:
import matplotlib.pyplot as plt
import numpy as np
x,y = np.meshgrid(np.arange(-2, 2, .2), np.arange(-2, 2, .25))
z = x*np.exp(-x**2 - y**2)
v, u = np.gradient(z, .2, .2)
fig, ax = plt.subplots()
q = ax.quiver(x,y,u,v)
plt.show()
Biểu đồ hình hộp còn được gọi là biểu đồ râu ria hiển thị tóm tắt tập hợp dữ liệu có chứa phần tư tối thiểu, phần tư thứ nhất, trung vị, phần tư thứ ba và tối đa. Trong một biểu đồ hình hộp, chúng tôi vẽ một hộp từ phần tư đầu tiên đến phần tư thứ ba. Một đường thẳng đứng đi qua hộp ở trung tuyến. Râu đi từ mỗi phần tư đến mức tối thiểu hoặc tối đa.
Hãy để chúng tôi tạo dữ liệu cho các ô hộp. Chúng tôi sử dụngnumpy.random.normal()chức năng tạo dữ liệu giả. Nó cần ba đối số, giá trị trung bình và độ lệch chuẩn của phân phối chuẩn và số lượng giá trị mong muốn.
np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)
Danh sách các mảng mà chúng tôi đã tạo ở trên là đầu vào bắt buộc duy nhất để tạo boxplot. Sử dụngdata_to_plot dòng mã, chúng ta có thể tạo ô vuông với mã sau:
fig = plt.figure()
# Create an axes instance
ax = fig.add_axes([0,0,1,1])
# Create the boxplot
bp = ax.boxplot(data_to_plot)
plt.show()
Dòng mã trên sẽ tạo ra kết quả sau:
Các ô violin tương tự như các ô hộp, ngoại trừ việc chúng cũng hiển thị mật độ xác suất của dữ liệu ở các giá trị khác nhau. Các ô này bao gồm một điểm đánh dấu cho trung vị của dữ liệu và một hộp cho biết phạm vi liên phần tư, như trong các ô hộp tiêu chuẩn. Phủ trên ô hộp này là ước tính mật độ nhân. Giống như các ô hình hộp, ô vĩ cầm được sử dụng để biểu thị sự so sánh của một phân phối biến đổi (hoặc phân phối mẫu) trên các "danh mục" khác nhau.
Một âm mưu vĩ cầm có nhiều thông tin hơn một âm mưu hộp đơn thuần. Trên thực tế, trong khi biểu đồ hình hộp chỉ hiển thị thống kê tóm tắt như phạm vi trung bình / trung vị và giữa các phần, thì biểu đồ vĩ cầm hiển thị phân phối đầy đủ của dữ liệu.
import matplotlib.pyplot as plt
np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)
## combine these different collections into a list
data_to_plot = [collectn_1, collectn_2, collectn_3, collectn_4]
# Create a figure instance
fig = plt.figure()
# Create an axes instance
ax = fig.add_axes([0,0,1,1])
# Create the boxplot
bp = ax.violinplot(data_to_plot)
plt.show()
Mặc dù ban đầu Matplotlib chỉ được thiết kế với mục đích vẽ biểu đồ hai chiều, một số tiện ích vẽ biểu đồ ba chiều đã được xây dựng trên màn hình hai chiều của Matplotlib trong các phiên bản sau, để cung cấp một bộ công cụ để trực quan hóa dữ liệu ba chiều. Biểu đồ ba chiều được bật bằng cách nhậpmplot3d toolkit, đi kèm với gói Matplotlib.
Các trục ba chiều có thể được tạo bằng cách chuyển từ khóa chiếu = '3d' vào bất kỳ quy trình tạo trục thông thường nào.
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
z = np.linspace(0, 1, 100)
x = z * np.sin(20 * z)
y = z * np.cos(20 * z)
ax.plot3D(x, y, z, 'gray')
ax.set_title('3D line plot')
plt.show()
Bây giờ chúng ta có thể vẽ nhiều kiểu âm mưu ba chiều khác nhau. Cốt truyện ba chiều cơ bản nhất là3D line plotđược tạo từ các bộ (x, y, z) bộ ba. Điều này có thể được tạo bằng cách sử dụng hàm ax.plot3D.
3D scatter plot được tạo ra bằng cách sử dụng ax.scatter3D chức năng.
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
z = np.linspace(0, 1, 100)
x = z * np.sin(20 * z)
y = z * np.cos(20 * z)
c = x + y
ax.scatter(x, y, z, c=c)
ax.set_title('3d Scatter plot')
plt.show()
Các ax.contour3D()hàm tạo biểu đồ đường bao ba chiều. Nó yêu cầu tất cả dữ liệu đầu vào phải ở dạng lưới thông thường hai chiều, với dữ liệu Z được đánh giá tại mỗi điểm. Ở đây, chúng tôi sẽ trình bày một biểu đồ đường bao ba chiều của một hàm hình sin ba chiều.
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
def f(x, y):
return np.sin(np.sqrt(x ** 2 + y ** 2))
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_title('3D contour')
plt.show()
Biểu đồ khung dây lấy một mạng lưới các giá trị và chiếu nó lên bề mặt ba chiều được chỉ định và có thể tạo ra các dạng ba chiều thu được khá dễ hình dung. Cácplot_wireframe() hàm được sử dụng cho mục đích -
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
def f(x, y):
return np.sin(np.sqrt(x ** 2 + y ** 2))
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_wireframe(X, Y, Z, color='black')
ax.set_title('wireframe')
plt.show()
Dòng mã trên sẽ tạo ra kết quả sau:
Biểu đồ bề mặt cho thấy mối quan hệ chức năng giữa một biến phụ thuộc được chỉ định (Y) và hai biến độc lập (X và Z). Cốt truyện là một cốt truyện đồng hành với cốt truyện đường viền. Biểu đồ bề mặt giống như biểu đồ khung dây, nhưng mỗi mặt của khung dây là một đa giác được lấp đầy. Điều này có thể hỗ trợ nhận thức về cấu trúc liên kết của bề mặt đang được hình dung. Cácplot_surface() hàm x, y và z làm đối số.
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
x = np.outer(np.linspace(-2, 2, 30), np.ones(30))
y = x.copy().T # transpose
z = np.cos(x ** 2 + y ** 2)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z,cmap='viridis', edgecolor='none')
ax.set_title('Surface plot')
plt.show()
Dòng mã trên sẽ tạo ra kết quả sau:
Matplotlib có hỗ trợ văn bản rộng rãi, bao gồm hỗ trợ cho các biểu thức toán học, TrueTypehỗ trợ đầu ra raster và vector, văn bản được phân tách theo dòng mới với các phép xoay tùy ý và hỗ trợ unicode. Matplotlib bao gồm matplotlib.font_manager của riêng nó, thực hiện một nền tảng chéo, thuật toán tìm phông chữ tuân thủ W3C.
Người dùng có rất nhiều quyền kiểm soát đối với các thuộc tính văn bản (cỡ chữ, độ đậm của phông chữ, vị trí và màu văn bản, v.v.). Matplotlib thực hiện một số lượng lớn các ký hiệu và lệnh toán học TeX.
Danh sách các lệnh sau được sử dụng để tạo văn bản trong giao diện Pyplot:
bản văn | Thêm văn bản tại một vị trí tùy ý của Axes. |
chú thích | Thêm chú thích, với một mũi tên tùy chọn, tại một vị trí tùy ý của Axes. |
xlabel | Thêm nhãn vào trục x của Axes. |
ylabel | Thêm nhãn vào trục y của Axes. |
tiêu đề | Thêm tiêu đề cho Axes. |
hình tượng | Thêm văn bản vào một vị trí tùy ý của Hình. |
suptitle | Thêm tiêu đề cho Hình. |
Tất cả các hàm này tạo và trả về matplotlib.text.Text() ví dụ.
Các đoạn mã sau chứng minh việc sử dụng một số chức năng ở trên:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.set_title('axes title')
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
ax.text(3, 8, 'boxed italics text in data coords', style='italic',
bbox = {'facecolor': 'red'})
ax.text(2, 6, r'an equation: $E = mc^2$', fontsize = 15)
ax.text(4, 0.05, 'colored text in axes coords',
verticalalignment = 'bottom', color = 'green', fontsize = 15)
ax.plot([2], [1], 'o')
ax.annotate('annotate', xy = (2, 1), xytext = (3, 4),
arrowprops = dict(facecolor = 'black', shrink = 0.05))
ax.axis([0, 10, 0, 10])
plt.show()
Dòng mã trên sẽ tạo ra kết quả sau:
Bạn có thể sử dụng một tập hợp con TeXmarkup trong bất kỳ chuỗi văn bản Matplotlib nào bằng cách đặt nó bên trong một cặp dấu đô la ($).
# math text
plt.title(r'$\alpha > \beta$')
Để tạo chỉ số dưới và chỉ số trên, hãy sử dụng các ký hiệu '_' và '^' -
r'$\alpha_i> \beta_i$'
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)
plt.plot(t,s)
plt.title(r'$\alpha_i> \beta_i$', fontsize=20)
plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$', fontsize = 20)
plt.text(0.1, -0.5, r'$\sqrt{2}$', fontsize=10)
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.show()
Dòng mã trên sẽ tạo ra kết quả sau:
Mô-đun hình ảnh trong gói Matplotlib cung cấp các chức năng cần thiết để tải, thay đổi tỷ lệ và hiển thị hình ảnh.
Thư viện Pillow hỗ trợ tải dữ liệu hình ảnh. Về cơ bản, Matplotlib chỉ hỗ trợ hình ảnh PNG. Các lệnh hiển thị bên dưới sẽ trở lại trên Pillow nếu quá trình đọc gốc không thành công.
Hình ảnh được sử dụng trong ví dụ này là tệp PNG, nhưng hãy ghi nhớ yêu cầu về Gối đó cho dữ liệu của riêng bạn. Cácimread() hàm được sử dụng để đọc dữ liệu hình ảnh trong một ndarray đối tượng của loại float32.
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
img = mpimg.imread('mtplogo.png')
Giả sử rằng hình ảnh sau được đặt tên là mtplogo.png có trong thư mục làm việc hiện tại.
Bất kỳ mảng nào chứa dữ liệu hình ảnh đều có thể được lưu vào tệp đĩa bằng cách thực thi imsave()chức năng. Tại đây, một phiên bản được lật theo chiều dọc của tệp png gốc được lưu bằng cách cho tham số gốc là thấp hơn.
plt.imsave("logo.png", img, cmap = 'gray', origin = 'lower')
Hình ảnh mới xuất hiện như bên dưới nếu được mở trong bất kỳ trình xem hình ảnh nào.
Để vẽ hình ảnh trên trình xem Matplotlib, hãy thực hiện imshow() chức năng.
imgplot = plt.imshow(img)
Gói matplotlib được xây dựng dựa trên khung chuyển đổi để dễ dàng di chuyển giữa các hệ tọa độ. Bốn hệ tọa độ có thể được sử dụng. Các hệ thống được mô tả ngắn gọn trong bảng dưới đây:
Danh từ: Tọa độ | Đối tượng chuyển đổi | Sự miêu tả |
---|---|---|
Dữ liệu | ax.transData | Hệ tọa độ dữ liệu đất đai của người sử dụng. được điều khiển bởi xlim và ylim |
Axes | ax.transAxes | Hệ trục tọa độ. (0,0) là phía dưới bên trái và (1,1) là phía trên bên phải của các trục. |
Nhân vật | fig.transFigure | Hệ tọa độ của Hình. (0,0) ở dưới cùng bên trái và (1,1) ở trên cùng bên phải của hình |
trưng bày | không ai | Đây là hệ tọa độ pixel của màn hình. (0,0) là phía dưới bên trái và (chiều rộng, chiều cao) là phía trên bên phải của màn hình tính bằng pixel. Ngoài ra, (matplotlib.transforms.IdentityTransform ()) có thể được sử dụng thay vì Không có. |
Hãy xem xét ví dụ sau:
axes.text(x,y,"my label")
Văn bản được đặt ở vị trí lý thuyết của một điểm dữ liệu (x, y). Vì vậy, chúng tôi sẽ nói về "coords dữ liệu".
Sử dụng các đối tượng biến đổi khác, vị trí có thể được kiểm soát. Ví dụ, nếu bài kiểm tra trên được đặt ở tâm của hệ tọa độ trục, hãy thực hiện dòng mã sau:
axes.text(0.5, 0.5, "middle of graph", transform=axes.transAxes)
Các phép biến đổi này có thể được sử dụng cho bất kỳ loại đối tượng Matplotlib nào. Chuyển đổi mặc định choax.text Là ax.transData và chuyển đổi mặc định cho fig.text Là fig.transFigure.
Hệ tọa độ trục cực kỳ hữu ích khi đặt văn bản theo trục của bạn. Bạn có thể thường muốn một bong bóng văn bản ở một vị trí cố định; ví dụ: ở phía trên bên trái của ngăn trục và giữ vị trí đó cố định khi bạn xoay hoặc thu phóng.