Python vẽ đồ thị 3D

Matplotlib là một thư viện trong Python được sử dụng để tạo hoạt ảnh tĩnh và động cũng như các sơ đồ với các chức năng sẵn có của nó. Nó có rất nhiều tính năng sẵn có và các công cụ phân tích tích hợp để phân tích bất kỳ hình hoặc biểu đồ nào

Nếu chúng ta muốn vẽ bất kỳ hình ba chiều nào thì chúng ta có thể sử dụng thư viện Matplotlib. Khi chúng tôi có một tập dữ liệu khổng lồ gồm các biến ba chiều và chúng tôi vẽ biểu đồ của nó thì nó trông rất phân tán và đây được gọi là biểu đồ phân tán 3D. Chúng tôi sẽ sử dụng bộ công cụ matplot3d của Matplotlib để vẽ hình ba chiều

có một cái rìu. hàm scatterd3D[] chấp nhận tập dữ liệu tọa độ X, Y và Z

Phải mất nhiều đối số hơn dựa trên các thuộc tính mà chúng tôi muốn cung cấp cho biểu đồ ba chiều của mình

Khi Matplotlib được tạo lần đầu tiên, chỉ có âm mưu hai chiều được xem xét. Một bộ sưu tập các công cụ thực tế [mặc dù khá hạn chế] để trực quan hóa dữ liệu ba chiều đã được tạo ra vào khoảng thời gian của 1. 0 bằng cách xếp lớp một số tiện ích biểu đồ ba chiều lên trên màn hình hai chiều của Matplotlib. Bằng cách nhập bộ công cụ mplot3d, là một phần của cài đặt Matplotlib cơ bản, có thể thực hiện được các biểu đồ ba chiều

Biểu đồ ba chiều đơn giản nhất là biểu đồ phân tán được tạo thành từ các dòng hoặc cụm [x, y, z] bộ ba. Chúng có thể được sản xuất bằng cách sử dụng rìu. cốt truyện3D và rìu. các chức năng phân tán3D, giống như biểu đồ hai chiều điển hình hơn đã được trình bày trước đây. Chúng có chữ ký cuộc gọi tương tự đáng kể với các đối tác hai chiều của chúng

Để tạo ảo giác về chiều sâu trên trang, độ trong suốt của các điểm phân tán đã được thay đổi

ví dụ 1

đầu ra

Giải trình

Trong ví dụ trên, chúng ta đã tạo biểu đồ ba chiều bằng cách sử dụng lệnh ax. hàm phân tán []. Ban đầu, chúng tôi đã nhập tất cả các thư viện mà chúng tôi yêu cầu, như numpy, matplotlib và mpl_toolkits. Sau đó, chúng tôi đã tạo bộ dữ liệu cho tọa độ x, y và z của các số ngẫu nhiên bằng cách sử dụng hàm randInt[]. Sau đó chúng tôi đã sử dụng rìu. scatter3D[] và đặt tọa độ x, y và z, và chúng tôi lấy màu đỏ cho các điểm. Cuối cùng, chúng ta hiển thị đồ thị bằng hàm show[]

ví dụ 2

đầu ra

Giải trình

Trong đoạn mã trên, chúng ta đã vẽ sơ đồ ba chiều bằng hàm ax. chức năng phân tán3D[]. Chúng tôi đã tạo bộ dữ liệu ngẫu nhiên cho các tọa độ x, y và z và vẽ chúng bằng cách sử dụng điểm đánh dấu '^'. Chúng tôi sử dụng hàm set_label để gán nhãn cho các trục tương ứng

ví dụ 3

đầu ra

Giải trình

Trong ví dụ trên, chúng tôi đã vẽ đồng thời hai bộ dữ liệu chiều 3 chiều trong cùng một mã. Đối với biểu đồ ba chiều đầu tiên, chúng tôi đã chọn màu xanh lam cho các điểm và '^' làm điểm đánh dấu cho các điểm trong hình

Theo cách tương tự đối với ô thứ hai, chúng tôi đã chọn màu đỏ cho các điểm và 'o' làm điểm đánh dấu các điểm trong hình

Dash là một khung nguồn mở để xây dựng các ứng dụng phân tích, không yêu cầu Javascript và nó được tích hợp chặt chẽ với thư viện vẽ đồ thị Plotly

Tìm hiểu về cách cài đặt Dash tại https. // dấu gạch ngang. kịch bản. ly/cài đặt

Ở mọi nơi trong trang này mà bạn thấy fig.show[], bạn có thể hiển thị cùng một con số trong ứng dụng Dash bằng cách chuyển nó tới đối số figure của thành phần Graph từ gói dash_core_components tích hợp như thế này

Chúng tôi sẽ bắt đầu bằng cách vẽ một điểm duy nhất trong không gian tọa độ 3D. Sau đó, chúng ta sẽ tìm hiểu cách tùy chỉnh các biểu đồ của mình và sau đó chúng ta sẽ chuyển sang các biểu đồ phức tạp hơn như bề mặt Gaussian 3D, đa giác 3D, v.v. Cụ thể, chúng ta sẽ xem xét các chủ đề sau

 

Mục lục

1

 

Vẽ một điểm duy nhất trong không gian 3D

Chúng ta hãy bắt đầu bằng cách thực hiện từng bước cần thiết để tạo biểu đồ 3D trong Python, với một ví dụ về biểu đồ một điểm trong không gian 3D

Bước 1. Nhập thư viện

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

Cái đầu tiên là một câu lệnh nhập tiêu chuẩn để vẽ đồ thị bằng matplotlib, mà bạn cũng sẽ thấy cho đồ thị 2D
Lần nhập thứ hai của lớp 

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
4 là bắt buộc để bật phép chiếu 3D. Mặt khác, nó không được sử dụng ở bất kỳ nơi nào khác

Lưu ý rằng lần nhập thứ hai là bắt buộc đối với các phiên bản Matplotlib trước 3. 2. 0. Đối với phiên bản 3. 2. 0 trở lên, bạn có thể vẽ sơ đồ 3D mà không cần nhập

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
5

Bước 2. Tạo hình và trục

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

đầu ra


Ở đây, trước tiên chúng ta tạo một hình có kích thước 4 inch X 4 inch
Sau đó, chúng tôi tạo một đối tượng trục 3-D bằng cách gọi phương thức 
fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
6 và chỉ định giá trị '3d' cho tham số 
fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
7
Chúng tôi sẽ sử dụng đối tượng trục này 'ax' để thêm bất kỳ biểu đồ nào vào hình

 

Lưu ý rằng hai bước này sẽ phổ biến trong hầu hết các sơ đồ 3D mà bạn thực hiện trong Python bằng Matplotlib

Bước 3. Vẽ điểm

Sau khi chúng tôi tạo đối tượng trục, chúng tôi có thể sử dụng nó để tạo bất kỳ loại biểu đồ nào chúng tôi muốn trong không gian 3D
Để vẽ một điểm duy nhất, chúng ta sẽ sử dụng phương pháp 

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
8 và chuyển ba tọa độ của điểm đó

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]

đầu ra


Như bạn có thể thấy, một điểm duy nhất đã được vẽ [màu xanh lam] tại [2,3,4]

 

Vẽ một đường liên tục 3D

Bây giờ chúng ta đã biết cách vẽ một điểm trong không gian 3D, tương tự chúng ta có thể vẽ một đường liên tục đi qua danh sách các tọa độ 3D

Chúng ta sẽ sử dụng phương thức 

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
9 và chuyển 3 mảng, mỗi mảng cho tọa độ x, y và z của các điểm trên đường thẳng

import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]

đầu ra


Chúng tôi đang tạo tọa độ x, y và z cho 50 điểm
Tọa độ x và y được tạo bằng cách sử dụng_______9_______0 để tạo 50 điểm phân bố đều trong khoảng từ -4π đến +4π. Tọa độ z chỉ đơn giản là tổng bình phương của tọa độ x và y tương ứng

 

Tùy chỉnh cốt truyện 3D

Hãy để chúng tôi vẽ một biểu đồ phân tán trong không gian 3D và xem cách chúng tôi có thể tùy chỉnh giao diện của nó theo những cách khác nhau dựa trên sở thích của chúng tôi. Chúng tôi sẽ sử dụng hạt giống ngẫu nhiên NumPy để bạn có thể tạo số ngẫu nhiên giống như hướng dẫn

np.random.seed[42]

xs = np.random.random[100]*10+20

ys = np.random.random[100]*5+7

zs = np.random.random[100]*15+50

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs,ys,zs]

plt.show[]

đầu ra


Bây giờ chúng ta hãy thêm một tiêu đề cho cốt truyện này

Thêm tiêu đề

Chúng ta sẽ gọi phương thức 

import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]
1 của đối tượng axis để thêm tiêu đề vào biểu đồ

ax.set_title["Atom velocity distribution"]

plt.show[]

đầu ra


LƯU Ý rằng tôi chưa thêm mã trước [để tạo hình và thêm biểu đồ phân tán] ở đây, nhưng bạn nên làm điều đó

Bây giờ chúng ta hãy thêm nhãn cho mỗi trục trên biểu đồ

Thêm nhãn trục

Chúng ta có thể đặt nhãn cho từng trục trong sơ đồ 3D bằng cách gọi các phương thức 

import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]
2, 
import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]
3 và 
import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]
4 trên đối tượng trục

ax.set_xlabel["Atomic mass [dalton]"]

ax.set_ylabel["Atomic radius [pm]"]

ax.set_zlabel["Atomic velocity [x10⁶ m/s]"]

plt.show[]

đầu ra

Sửa đổi các điểm đánh dấu

Như chúng ta đã thấy trong các ví dụ trước, theo mặc định, điểm đánh dấu cho mỗi điểm là một vòng tròn màu xanh có kích thước không đổi.
Chúng ta có thể thay đổi hình thức của các điểm đánh dấu để làm cho chúng biểu cảm hơn

Hãy để chúng tôi bắt đầu bằng cách thay đổi màu sắc và phong cách của điểm đánh dấu

ax.scatter[xs,ys,zs, marker="x", c="red"]

plt.show[]

đầu ra


Chúng tôi đã sử dụng các thông số 
import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]
5 và 
import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]
6 để thay đổi kiểu dáng và màu sắc của các điểm riêng lẻ

Sửa đổi các giới hạn trục và đánh dấu

Phạm vi và khoảng giá trị trên các trục được đặt theo mặc định dựa trên các giá trị đầu vào
Tuy nhiên, chúng tôi có thể thay đổi chúng thành các giá trị mong muốn của chúng tôi

Hãy để chúng tôi tạo một biểu đồ phân tán khác biểu thị một tập hợp các điểm dữ liệu mới, sau đó sửa đổi phạm vi và khoảng trục của nó

np.random.seed[42]

ages = np.random.randint[low = 8, high = 30, size=35]

heights = np.random.randint[130, 195, 35]

weights = np.random.randint[30, 160, 35]

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs = heights, ys = weights, zs = ages]

ax.set_title["Age-wise body weight-height distribution"]

ax.set_xlabel["Height [cm]"]

ax.set_ylabel["Weight [kg]"]

ax.set_zlabel["Age [years]"]

plt.show[]

đầu ra


Chúng tôi đã vẽ dữ liệu của 3 biến là chiều cao, cân nặng và tuổi trên 3 trục
Như bạn có thể thấy, các giới hạn trên trục X, Y và Z đã được gán tự động dựa trên dữ liệu đầu vào

Chúng ta hãy sửa đổi giới hạn tối thiểu và tối đa trên mỗi trục, bằng cách gọi các phương thức 

import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]
7, 
import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]
8 và 
import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]
9

ax.set_xlim[100,200]

ax.set_ylim[20,160]

ax.set_zlim[5,35]

plt.show[]

đầu ra


Các giới hạn cho ba trục đã được sửa đổi dựa trên các giá trị tối thiểu và tối đa mà chúng tôi đã chuyển cho các phương thức tương ứng
Chúng tôi cũng có thể sửa đổi các dấu kiểm riêng lẻ cho từng trục. Hiện tại, các tick trên trục X là [100,120,140,160,180,200]
Hãy để chúng tôi cập nhật điều này thành [100,125,150,175,200]

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']
0

đầu ra


Tương tự như vậy, chúng ta có thể cập nhật các dấu chọn Y và Z bằng cách sử dụng các phương pháp 
np.random.seed[42]

xs = np.random.random[100]*10+20

ys = np.random.random[100]*5+7

zs = np.random.random[100]*15+50

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs,ys,zs]

plt.show[]
0 và 
np.random.seed[42]

xs = np.random.random[100]*10+20

ys = np.random.random[100]*5+7

zs = np.random.random[100]*15+50

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs,ys,zs]

plt.show[]
1

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']
1

đầu ra

Thay đổi kích thước của cốt truyện

Nếu chúng ta muốn các ô của mình lớn hơn hoặc nhỏ hơn kích thước mặc định, chúng ta có thể dễ dàng đặt kích thước của ô khi khởi tạo hình – sử dụng tham số 

np.random.seed[42]

xs = np.random.random[100]*10+20

ys = np.random.random[100]*5+7

zs = np.random.random[100]*15+50

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs,ys,zs]

plt.show[]
2 của phương thức 
np.random.seed[42]

xs = np.random.random[100]*10+20

ys = np.random.random[100]*5+7

zs = np.random.random[100]*15+50

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs,ys,zs]

plt.show[]
3,
hoặc chúng ta có thể cập nhật kích thước của một ô hiện có bằng cách gọi phương thức 
np.random.seed[42]

xs = np.random.random[100]*10+20

ys = np.random.random[100]*5+7

zs = np.random.random[100]*15+50

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs,ys,zs]

plt.show[]
4 trên đối tượng hình
Trong cả hai cách tiếp cận, chúng ta phải chỉ định chiều rộng và chiều cao của ô tính bằng inch

Vì chúng ta đã thấy trước đó, bây giờ chúng ta hãy xem cách tiếp cận thứ hai i. e sửa đổi kích thước của một ô hiện có
Chúng tôi sẽ thay đổi kích thước của biểu đồ phân tán thành 6 × 6 inch

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']
2

đầu ra


Kích thước của biểu đồ phân tán của chúng tôi đã được tăng lên so với kích thước mặc định trước đây của nó

Tắt/bật đường lưới

Tất cả các ô mà chúng tôi đã vẽ cho đến nay đều có đường lưới trên chúng theo mặc định
Chúng ta có thể thay đổi điều này bằng cách gọi phương thức 

np.random.seed[42]

xs = np.random.random[100]*10+20

ys = np.random.random[100]*5+7

zs = np.random.random[100]*15+50

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs,ys,zs]

plt.show[]
5 của đối tượng trục và chuyển giá trị 'Sai. ’
Nếu chúng ta muốn các đường lưới trở lại, chúng ta có thể gọi phương thức tương tự với tham số 'True. ’

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']
3

đầu ra

Đặt màu cốt truyện 3D dựa trên lớp

Chúng ta hãy giả sử rằng các cá nhân được đại diện bởi biểu đồ phân tán của chúng ta được chia thành hai hoặc nhiều loại
Chúng ta có thể biểu thị thông tin này bằng cách vẽ các cá nhân của từng danh mục bằng một màu khác
Chẳng hạn, chúng ta hãy chia dữ liệu của mình thành các danh mục 'Nam' và 'Nữ'
Chúng tôi sẽ tạo một mảng mới có cùng kích thước với số điểm dữ liệu và gán giá trị 0 cho 'Nam' và 1 cho danh mục 'Nữ'
Sau đó, chúng tôi sẽ chuyển mảng này đến tham số màu 

import numpy as np

x = np.linspace[−4*np.pi,4*np.pi,50]

y = np.linspace[−4*np.pi,4*np.pi,50]

z = x**2 + y**2

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.plot[x,y,z]

plt.show[]
6 khi tạo biểu đồ phân tán

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']
4

đầu ra


Cốt truyện hiện hiển thị từng loại trong số hai loại với một màu khác nhau
Nhưng làm thế nào chúng ta biết màu nào tương ứng với loại nào?

Chúng ta có thể thêm một ‘thanh màu’ để giải quyết vấn đề này

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']
5

đầu ra

Đặt huyền thoại

Thường thì chúng tôi có nhiều hơn 1 bộ dữ liệu mà chúng tôi muốn vẽ trên cùng một hình
Trong tình huống như vậy, chúng ta phải gán nhãn cho từng ô và thêm chú thích vào hình để phân biệt các ô khác nhau với nhau

Ví dụ: giả sử dữ liệu tuổi-chiều cao-cân nặng của chúng tôi được thu thập từ 3 tiểu bang của Hoa Kỳ là Florida, Georgia và California
Chúng tôi muốn vẽ các biểu đồ phân tán cho 3 trạng thái và thêm một chú thích để phân biệt chúng với nhau

Hãy để chúng tôi tạo 3 ô trong vòng lặp for và gán một nhãn khác cho chúng mỗi lần

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']
6

đầu ra

Đánh dấu lô có kích thước khác nhau

Trong các biểu đồ phân tán mà chúng ta đã thấy cho đến nay, tất cả các điểm đánh dấu đều có kích thước không đổi

Chúng tôi có thể thay đổi kích thước của điểm đánh dấu bằng cách chuyển các giá trị tùy chỉnh vào tham số

np.random.seed[42]

xs = np.random.random[100]*10+20

ys = np.random.random[100]*5+7

zs = np.random.random[100]*15+50

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs,ys,zs]

plt.show[]
7 của biểu đồ phân tán
Chúng tôi có thể chuyển một số duy nhất để đặt tất cả các điểm đánh dấu thành một kích thước cố định mới hoặc chúng tôi có thể cung cấp một mảng các giá trị, trong đó mỗi giá trị đại diện cho kích thước của một điểm đánh dấu

Trong ví dụ của chúng tôi, chúng tôi sẽ tính toán một biến mới gọi là 'bmi' từ chiều cao và cân nặng của các cá nhân và làm cho kích thước của các điểm đánh dấu riêng lẻ tỷ lệ thuận với giá trị BMI của họ

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']
7

đầu ra


Kích thước của các điểm đánh dấu trong biểu đồ này càng lớn thì chỉ số BMI của những cá nhân đó càng cao và ngược lại

Vẽ sơ đồ phân phối Gaussian

Bạn có thể biết về một phân phối Gaussian đơn biến được vẽ trên mặt phẳng 2D, thường được gọi là 'đường cong hình chuông'. ’

nguồn. https. // vi. wikipedia. org/wiki/Tệp. Bình thường_Distribution_PDF. svg

Chúng ta cũng có thể vẽ sơ đồ phân phối Gaussian trong không gian 3D, sử dụng phân phối chuẩn đa biến
Chúng ta phải xác định các biến X và Y và vẽ biểu đồ phân phối xác suất của chúng cùng nhau

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']
8

đầu ra


Sử dụng phương pháp 
np.random.seed[42]

xs = np.random.random[100]*10+20

ys = np.random.random[100]*5+7

zs = np.random.random[100]*15+50

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs,ys,zs]

plt.show[]
8, chúng ta có thể tạo các bề mặt tương tự trong không gian 3D

Vẽ một đa giác 3D

Chúng ta cũng có thể vẽ đa giác với các đỉnh 3 chiều trong Python

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']
9

đầu ra

Xoay một cốt truyện 3D bằng chuột

Để tạo một biểu đồ tương tác trong Jupyter Notebook, bạn nên chạy
lệnh ma thuật 

np.random.seed[42]

xs = np.random.random[100]*10+20

ys = np.random.random[100]*5+7

zs = np.random.random[100]*15+50

fig = plt.figure[]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[xs,ys,zs]

plt.show[]
9 ở đầu cuốn sổ

Điều này cho phép chúng tôi tương tác với các ô 3D, bằng cách phóng to và thu nhỏ ô, cũng như xoay chúng theo bất kỳ hướng nào

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
0

đầu ra

Vẽ hai bản phân phối 3D khác nhau

Chúng ta có thể thêm hai biểu đồ 3D khác nhau vào cùng một hình, với sự trợ giúp của phương pháp 

ax.set_title["Atom velocity distribution"]

plt.show[]
0
Số có 3 chữ số mà chúng tôi cung cấp cho phương thức cho biết số lượng hàng và cột trong lưới cũng như vị trí của ô hiện tại trong lưới
Hai chữ số đầu tiên cho biết tổng số hàng và cột chúng ta cần chia hình trong
Chữ số cuối cùng cho biết vị trí của ô con trong lưới

Ví dụ: nếu chúng ta chuyển giá trị 223 cho phương thức 

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
6, thì chúng ta đang đề cập đến ô thứ 3 trong lưới 2×2 [xem xét thứ tự hàng đầu tiên]

Bây giờ chúng ta hãy xem một ví dụ trong đó chúng ta vẽ hai bản phân phối khác nhau trên một ô duy nhất

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
1

đầu ra


Chúng ta có thể vẽ bao nhiêu ô con tùy thích theo cách này, miễn là chúng ta khớp chúng ngay trong lưới

Xuất biểu đồ Python 3D sang HTML

Nếu chúng ta muốn nhúng một hình đồ thị 3D vào một trang HTML mà không cần lưu nó dưới dạng tệp hình ảnh trước,
chúng ta có thể làm như vậy bằng cách mã hóa hình thành 'base64' và sau đó chèn nó vào đúng vị trí trong thẻ HTML 

ax.set_title["Atom velocity distribution"]

plt.show[]
2

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
2

Bây giờ chúng ta có thể viết chuỗi mã HTML này vào một tệp HTML, sau đó chúng ta có thể xem tệp này trong trình duyệt

fig = plt.figure[figsize=[4,4]]

ax = fig.add_subplot[111, projection='3d']

ax.scatter[2,3,4] # plot the point [2,3,4] on the figure

plt.show[]
3

đầu ra

Phần kết luận

Trong hướng dẫn này, chúng ta đã học cách vẽ đồ thị 3D trong Python bằng thư viện matplotlib
Chúng tôi bắt đầu bằng cách vẽ một điểm trong không gian tọa độ 3D, sau đó vẽ các đường cong 3D và các biểu đồ phân tán

Sau đó, chúng tôi đã học được nhiều cách khác nhau để tùy chỉnh biểu đồ 3D trong Python, chẳng hạn như thêm tiêu đề, chú giải, nhãn trục vào biểu đồ, thay đổi kích thước biểu đồ, bật/tắt đường lưới trên biểu đồ, sửa đổi dấu trục, v.v.
Chúng tôi cũng đã học cách thay đổi kích thước và màu sắc của điểm đánh dấu dựa trên danh mục điểm dữ liệu

Sau đó, chúng tôi đã học cách vẽ các bề mặt trong không gian 3D. Chúng tôi đã vẽ sơ đồ phân phối Gaussian và đa giác 3D bằng Python

Sau đó, chúng tôi đã xem cách chúng tôi có thể tương tác với biểu đồ Python 3D trong sổ ghi chép Jupyter

Cuối cùng, chúng ta đã học cách vẽ nhiều ô con trên cùng một hình và cách xuất một hình thành mã HTML

Chủ Đề