Có nhiều vấn đề trong kỹ thuật yêu cầu kiểm tra miền 2 chiều. Ví dụ: nếu bạn muốn xác định khoảng cách từ một điểm cụ thể trên một mặt phẳng đến bất kỳ mặt phẳng nào khác, bạn cần nghĩ về cả tọa độ x và y. Có nhiều chức năng khác cần tọa độ x và y
Để hiểu rõ hơn cách hoạt động của biểu đồ trong Python, hãy bắt đầu đọc các trang sau từ trang Hướng dẫn
Ngoài ra, có một số hướng dẫn tuyệt vời ngoài kia. Ví dụ
ghi chú
Kể từ matplotlib 3. 2. 0, mô-đun con axis3d không còn cần phải nhập từ mpl_toolkits. mplot3d. Để kiểm tra nhanh trên dòng lệnh, hãy thử
import matplotlib matplotlib.__version__
Nếu phiên bản cũ hơn 3. 2. 0, bạn sẽ cần thêm
from mpl_toolkits.mplot3d import axes3d
đến phần mở đầu của các ví dụ dưới đây
Các bản vá riêng lẻ
Một cách để tạo bề mặt là tạo danh sách tọa độ x, y và z cho từng vị trí của miếng vá. Python có thể tạo một bề mặt từ các điểm được chỉ định bởi ma trận và sau đó sẽ kết nối các điểm đó bằng cách liên kết các giá trị cạnh nhau trong ma trận. Ví dụ: nếu x, y và z là ma trận 2x2, bề mặt sẽ tạo nhóm bốn đường nối bốn điểm và sau đó điền vào khoảng trống giữa bốn đường
import numpy as np import matplotlib.pyplot as plt fig = plt.figure[num=1, clear=True] ax = fig.add_subplot[1, 1, 1, projection='3d'] x = np.array[[[1, 3], [2, 4]]] y = np.array[[[5, 6], [7, 8]]] z = np.array[[[9, 12], [10, 11]]] ax.plot_surface[x, y, z] ax.set[xlabel='x', ylabel='y', zlabel='z'] fig.tight_layout[] fig.savefig['PatchExOrig_py.png']
Phiên bản nữ trang
Lưu ý rằng bốn "góc" ở trên không phải là tất cả đồng phẳng;
ax.view_init[elev=30, azim=45] plt.draw[]
mang lại hình ảnh sau đây
Bạn có thể thêm nhiều bản vá hơn vào bề mặt bằng cách tăng kích thước của ma trận. Ví dụ: thêm một cột khác sẽ thêm hai giao điểm nữa vào bề mặt
fig = plt.figure[num=1, clear=True] ax = fig.add_subplot[1, 1, 1, projection='3d'] x = np.array[[[1, 3, 5], [2, 4, 6]]] y = np.array[[[5, 6, 5], [7, 8, 9]]] z = np.array[[[9, 12, 12], [10, 11, 12]]] ax.plot_surface[x, y, z] ax.set[xlabel='x', ylabel='y', zlabel='z'] ax.view_init[elev=30, azim=220] fig.tight_layout[]
Lưu ý xoay để nhìn rõ hơn hai bản vá khác nhau
Lệnh lưới lưới
Phần lớn thời gian, thay vì chỉ định các bản vá riêng lẻ, bạn sẽ có các hàm gồm hai tham số để vẽ đồ thị. Lệnh meshgrid của Numpy được sử dụng cụ thể để tạo ma trận đại diện cho hai tham số. Ví dụ: lưu ý đầu ra cho các lệnh Python sau
In [1]: [x, y] = np.meshgrid[np.arange[-2, 2.1, 1], np.arange[-1, 1.1, .25]] In [2]: x Out[2]: array[[[-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.], [-2., -1., 0., 1., 2.]]] In [3]: y Out[3]: array[[[-1. , -1. , -1. , -1. , -1. ], [-0.75, -0.75, -0.75, -0.75, -0.75], [-0.5 , -0.5 , -0.5 , -0.5 , -0.5 ], [-0.25, -0.25, -0.25, -0.25, -0.25], [ 0. , 0. , 0. , 0. , 0. ], [ 0.25, 0.25, 0.25, 0.25, 0.25], [ 0.5 , 0.5 , 0.5 , 0.5 , 0.5 ], [ 0.75, 0.75, 0.75, 0.75, 0.75], [ 1. , 1. , 1. , 1. , 1. ]]]
Đối số đầu tiên đưa ra các giá trị mà biến đầu ra thứ nhất sẽ bao gồm và đối số thứ hai đưa ra các giá trị mà biến đầu ra thứ hai sẽ bao gồm. Lưu ý rằng biến đầu ra thứ nhất
from mpl_toolkits.mplot3d import axes3d5 về cơ bản cung cấp tọa độ
from mpl_toolkits.mplot3d import axes3d5 và biến đầu ra thứ hai
from mpl_toolkits.mplot3d import axes3d7 đưa ra tọa độ
from mpl_toolkits.mplot3d import axes3d7. Điều này hữu ích nếu bạn muốn vẽ một hàm ở dạng 2-D. Lưu ý rằng các giá trị dừng cho các lệnh arange vừa qua nơi chúng tôi muốn kết thúc
Ví dụ sử dụng 2 biến độc lập
Ví dụ: để vẽ đồ thị
from mpl_toolkits.mplot3d import axes3d9 trên phạm vi của
from mpl_toolkits.mplot3d import axes3d5 và
from mpl_toolkits.mplot3d import axes3d7 được chỉ định ở trên - mã sẽ là
fig = plt.figure[num=1, clear=True] ax = fig.add_subplot[1, 1, 1, projection='3d'] [x, y] = np.meshgrid[np.arange[-2, 2.1, 1], np.arange[-1, 1.1, .25]] z = x + y ax.plot_surface[x, y, z] ax.set[xlabel='x', ylabel='y', zlabel='z', title='z = x + y'] fig.tight_layout[]
và đồ thị là
Nếu bạn muốn làm cho nó nhiều màu sắc hơn, bạn có thể nhập các bản đồ màu và sau đó sử dụng một bản đồ màu;
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm fig = plt.figure[num=1, clear=True] ax = fig.add_subplot[1, 1, 1, projection='3d'] [x, y] = np.meshgrid[np.arange[-2, 2.1, 1], np.arange[-1, 1.1, .25]] z = x + y ax.plot_surface[x, y, z, cmap=cm.copper] ax.set[xlabel='x', ylabel='y', zlabel='z', title='z = x + y'] fig.tight_layout[]
Để xem tất cả các bản đồ màu, sau khi nhập nhóm cm, chỉ cần gõ
help[cm]
để xem tên hoặc vào Colormap Reference để xem màu
Để tìm khoảng cách r từ một điểm cụ thể, chẳng hạn như
import numpy as np import matplotlib.pyplot as plt fig = plt.figure[num=1, clear=True] ax = fig.add_subplot[1, 1, 1, projection='3d'] x = np.array[[[1, 3], [2, 4]]] y = np.array[[[5, 6], [7, 8]]] z = np.array[[[9, 12], [10, 11]]] ax.plot_surface[x, y, z] ax.set[xlabel='x', ylabel='y', zlabel='z'] fig.tight_layout[] fig.savefig['PatchExOrig_py.png']2, bạn chỉ cần thay đổi hàm. Vì khoảng cách giữa hai điểm \[[x, y]\] và \[[x_0, y_0]\] được cho bởi \[ r=\sqrt{[x-x_0]^2+[y-y_0]^2
fig = plt.figure[num=1, clear=True] ax = fig.add_subplot[1, 1, 1, projection='3d'] [x, y] = np.meshgrid[np.arange[-2, 2.1, 1], np.arange[-1, 1.1, .25]] z = np.sqrt[[x-[1]]**2 + [y-[-0.5]]**2] ax.plot_surface[x, y, z, cmap=cm.Purples] ax.set[xlabel='x', ylabel='y', zlabel='z', title='Distance from [1, -0.5]'] fig.tight_layout[]
và cốt truyện là
Ví dụ sử dụng lưới tinh chỉnh
Bạn cũng có thể sử dụng lưới mịn hơn để tạo một cốt truyện đẹp hơn
from mpl_toolkits.mplot3d import axes3d0
và cốt truyện là
Sử dụng các hệ tọa độ khác
Các lệnh vẽ đồ thị như
import numpy as np import matplotlib.pyplot as plt fig = plt.figure[num=1, clear=True] ax = fig.add_subplot[1, 1, 1, projection='3d'] x = np.array[[[1, 3], [2, 4]]] y = np.array[[[5, 6], [7, 8]]] z = np.array[[[9, 12], [10, 11]]] ax.plot_surface[x, y, z] ax.set[xlabel='x', ylabel='y', zlabel='z'] fig.tight_layout[] fig.savefig['PatchExOrig_py.png']3 và
import numpy as np import matplotlib.pyplot as plt fig = plt.figure[num=1, clear=True] ax = fig.add_subplot[1, 1, 1, projection='3d'] x = np.array[[[1, 3], [2, 4]]] y = np.array[[[5, 6], [7, 8]]] z = np.array[[[9, 12], [10, 11]]] ax.plot_surface[x, y, z] ax.set[xlabel='x', ylabel='y', zlabel='z'] fig.tight_layout[] fig.savefig['PatchExOrig_py.png']4 tạo bề mặt dựa trên ma trận của các tọa độ x, y và z tương ứng, nhưng bạn cũng có thể sử dụng các hệ tọa độ khác để tính toán vị trí của các điểm. Như một ví dụ, chức năng\[ z = e^{-\sqrt{x^2+y^2}}~\cos[4x]~\cos[4y] \]
có thể được vẽ trên một lưới trực tuyến bằng cách sử dụng
from mpl_toolkits.mplot3d import axes3d1
cho
Nó cũng có thể được vẽ trên một miền tròn sử dụng tọa độ cực. Để làm điều đó, các tọa độ r và \[\theta\] có thể được tạo bằng lưới và các giá trị x, y và z thích hợp có thể thu được bằng cách lưu ý rằng \[x=r\cos[\theta]\] và \[ . z sau đó có thể được tính từ bất kỳ tổ hợp nào của x, y, r và \[\theta\]
from mpl_toolkits.mplot3d import axes3d2
sản xuất
Thanh màu
Bạn có thể muốn thêm một thanh màu để chỉ ra các giá trị được gán cho các màu cụ thể. Điều này có thể được thực hiện bằng cách sử dụng lệnh
import numpy as np import matplotlib.pyplot as plt fig = plt.figure[num=1, clear=True] ax = fig.add_subplot[1, 1, 1, projection='3d'] x = np.array[[[1, 3], [2, 4]]] y = np.array[[[5, 6], [7, 8]]] z = np.array[[[9, 12], [10, 11]]] ax.plot_surface[x, y, z] ax.set[xlabel='x', ylabel='y', zlabel='z'] fig.tight_layout[] fig.savefig['PatchExOrig_py.png']5 nhưng để sử dụng nó, bạn cần có quyền truy cập vào một biến đề cập đến biểu đồ bề mặt của bạn - lưu ý cách sử dụng biến chipplot bên dưới
from mpl_toolkits.mplot3d import axes3d3
sản xuất
không có thử
from mpl_toolkits.mplot3d import axes3d4
câu hỏi
Gửi câu hỏi của bạn bằng cách chỉnh sửa trang thảo luận của bài viết này. Chỉnh sửa trang, sau đó cuộn xuống dưới cùng và thêm câu hỏi bằng cách nhập các ký tự *{{Q}}, tiếp theo là câu hỏi của bạn và cuối cùng là chữ ký của bạn [với bốn dấu ngã, i. e. ~~~~]. Sử dụng {{Q}} sẽ tự động đưa trang vào danh mục trang có câu hỏi - những biên tập viên khác muốn giúp đỡ sau đó có thể truy cập trang danh mục đó để xem vị trí của câu hỏi. Xem trang cho Mẫu. Q để biết chi tiết và ví dụ