Biểu đồ bề mặt Python 3d từ các điểm

nhập khẩu cốt truyện. graph_objects khi nhập numpy dưới dạng np z1 = np. mảng [[ [8. 83,8. 89,8. 81,8. 87,8. 9,8. 87], [8. 89,8. 94,8. 85,8. 94,8. 96,8. 92], [8. 84,8. 9,8. 82,8. 92,8. 93,8. 91], [8. 79,8. 85,8. 79,8. 9,8. 94,8. 92], [8. 79,8. 88,8. 81,8. 9,8. 95,8. 92], [8. 8,8. 82,8. 78,8. 91,8. 94,8. 92], [8. 75,8. 78,8. 77,8. 91,8. 95,8. 92], [8. 8,8. 8,8. 77,8. 91,8. 95,8. 94], [8. 74,8. 81,8. 76,8. 93,8. 98,8. 99], [8. 89,8. 99,8. 92,9. 1,9. 13,9. 11], [8. 97,8. 97,8. 91,9. 09,9. 11,9. 11], [9. 04,9. 08,9. 05,9. 25,9. 28,9. 27], [9,9. 01,9,9. 2,9. 23,9. 2], [8. 99,8. 99,8. 98,9. 18,9. 2,9. 19], [8. 93,8. 97,8. 97,9. 18,9. 2,9. 18] ]] z2 = z1 + 1 z3 = z1 - 1 vả = đi. Hình [dữ liệu = [ đi. Bề mặt[z=z1], đi. Bề mặt[z=z2, tỷ lệ hiển thị=Sai, độ mờ=0. 9], đi. Bề mặt[z=z3, showscale=False, opacity=0. 9] ]] hình. chỉ[]

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 axes3d
5 về cơ bản cung cấp tọa độ
from mpl_toolkits.mplot3d import axes3d
5 và biến đầu ra thứ hai
from mpl_toolkits.mplot3d import axes3d
7 đưa ra tọa độ
from mpl_toolkits.mplot3d import axes3d
7. Đ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 axes3d
9 trên phạm vi của
from mpl_toolkits.mplot3d import axes3d
5 và
from mpl_toolkits.mplot3d import axes3d
7 đượ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 axes3d
0

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 axes3d
1

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 axes3d
2

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 axes3d
3

sản xuất

không có thử

from mpl_toolkits.mplot3d import axes3d
4

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ụ

Làm cách nào để vẽ 3 mảng trong Python?

Làm cách nào để vẽ 3 mảng trong Python? .
gọi plt. plot[] nhiều lần nếu cần để thêm các dòng bổ sung vào biểu đồ
nhập matplotlib. pyplot dưới dạng plt
x_tọa độ = [1, 2, 3]
y1_coords = [1, 2, 3]
tọa độ y2 = [3, 4, 5]
plt. biểu đồ [tọa độ x, tọa độ y1] # vẽ dòng đầu tiên

Chúng ta sẽ sử dụng chức năng nào để vẽ bề mặt 3D trong Matplotlib?

Các axis3d có trong mpl_toolkits của Matplotlib. bộ công cụ mplot3d cung cấp các chức năng cần thiết dùng để tạo các sơ đồ bề mặt 3D. Biểu đồ bề mặt được tạo bằng cách sử dụng ax. Hàm plot_surface[] .

Chủ Đề