Hướng dẫn 3d contour plot python - python vẽ đường viền 3d


The ax.contour3D() function creates three-dimensional contour plot. It requires all the input data to be in the form of two-dimensional regular grids, with the Z-data evaluated at each point. Here, we will show a three-dimensional contour diagram of a three-dimensional sinusoidal function.ax.contour3D() function creates three-dimensional contour plot. It requires all the input data to be in the form of two-dimensional regular grids, with the Z-data evaluated at each point. Here, we will show a three-dimensional contour diagram of a three-dimensional sinusoidal function.

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()

Hướng dẫn 3d contour plot python - python vẽ đường viền 3d

Matplotlib ban đầu được thiết kế chỉ với âm mưu hai chiều trong tâm trí. Trong khoảng thời gian phát hành 1.0, một số tiện ích âm mưu ba chiều được xây dựng trên màn hình hai chiều của Matplotlib và kết quả là một bộ công cụ thuận tiện (nếu hơi hạn chế) để trực quan hóa dữ liệu ba chiều. Các sơ đồ ba chiều được bật bằng cách nhập bộ công cụ

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
5, đi kèm với cài đặt matplotlib chính:

Nội dung chính ShowShow

  • Điểm và dòng ba chiều
  • Lô đường viền ba chiều
  • Khung dây và lô bề mặt
  • Tam giác bề mặt
  • Ví dụ: Hình dung một dải Möbius
  • Chúng ta có thể vẽ cốt truyện 3D trong Python không?
  • Làm thế nào để bạn vẽ đồ thị 3 chiều trong Python?
  • Làm thế nào để bạn tạo ra một cốt truyện bề mặt 2D trong Python?
  • Matplotlib 2D hay 3D?

In [1]:

from mpl_toolkits import mplot3d

Khi mô hình con này được nhập, một trục ba chiều có thể được tạo bằng cách chuyển từ khóa

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
6 cho bất kỳ thói quen tạo trục thông thường nào:

In [2]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

In [3]:

fig = plt.figure()
ax = plt.axes(projection='3d')

Với các trục ba chiều này được kích hoạt, giờ đây chúng ta có thể vẽ một loạt các loại lô ba chiều. Cấu trúc ba chiều là một trong những chức năng có lợi rất cao từ việc xem các số liệu tương tác thay vì tĩnh trong sổ ghi chép; Hãy nhớ lại rằng để sử dụng các số liệu tương tác, bạn có thể sử dụng

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
7 thay vì
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
8 khi chạy mã này.

Điểm và dòng ba chiều

Lô đường viền ba chiều

Khung dây và lô bề mặt

In [4]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
0

Tam giác bề mặt

Lô đường viền ba chiều

Khung dây và lô bề mặt

Tam giác bề mặt

In [5]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
4

In [6]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
5

Ví dụ: Hình dung một dải Möbius

Chúng ta có thể vẽ cốt truyện 3D trong Python không?

Làm thế nào để bạn vẽ đồ thị 3 chiều trong Python?

Khung dây và lô bề mặt

Tam giác bề mặt

In [8]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
7

Một âm mưu bề mặt giống như một âm mưu khung dây, nhưng mỗi mặt của khung dây là một đa giác đầy. Thêm một colormap vào các đa giác đầy có thể hỗ trợ nhận thức về cấu trúc liên kết của bề mặt được hình dung:

In [9]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
8

Lưu ý rằng mặc dù lưới các giá trị cho một biểu đồ bề mặt cần phải là hai chiều, nhưng nó không cần phải là trực tràng. Dưới đây là một ví dụ về việc tạo ra một lưới cực một phần, khi được sử dụng với biểu đồ

fig = plt.figure()
ax = plt.axes(projection='3d')
5 có thể cho chúng ta một lát cắt vào chức năng mà chúng ta đang hình dung:

In [10]:

from mpl_toolkits import mplot3d
0

Tam giác bề mặt

Đối với một số ứng dụng, các lưới được lấy mẫu đồng đều theo yêu cầu của các thói quen trên là quá hạn chế và bất tiện. Trong những tình huống này, các lô dựa trên tam giác có thể rất hữu ích. Điều gì sẽ xảy ra nếu thay vì một trận hòa thậm chí từ một cartesian hoặc lưới cực, thay vào đó chúng ta có một tập hợp các trận hòa ngẫu nhiên?

In [11]:

from mpl_toolkits import mplot3d
1

Chúng ta có thể tạo ra một biểu đồ phân tán của các điểm để có được ý tưởng về bề mặt mà chúng ta đang lấy mẫu từ:

In [12]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
0

Điều này để lại rất nhiều điều mong muốn. Chức năng sẽ giúp chúng ta trong trường hợp này là

fig = plt.figure()
ax = plt.axes(projection='3d')
6, tạo ra một bề mặt bằng cách đầu tiên tìm một bộ hình tam giác được hình thành giữa các điểm liền kề (hãy nhớ rằng X, Y và Z Đây là các mảng một chiều):

In [13]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
1

Kết quả chắc chắn không sạch sẽ như khi nó được vẽ với một lưới, nhưng tính linh hoạt của một tam giác như vậy cho phép một số lô ba chiều thực sự thú vị. Ví dụ, thực sự có thể vẽ một dải Möbius ba chiều bằng cách sử dụng điều này, như chúng ta sẽ thấy tiếp theo.

Ví dụ: Hình dung một dải Möbius

Một dải Möbius tương tự như một dải giấy dán vào một vòng lặp với một nửa twist. Về mặt cấu trúc, nó khá thú vị bởi vì mặc dù xuất hiện nó chỉ có một mặt duy nhất! Ở đây chúng tôi sẽ trực quan hóa một đối tượng như vậy bằng cách sử dụng các công cụ ba chiều của Matplotlib. Chìa khóa để tạo dải Möbius là suy nghĩ về tham số hóa của nó: đó là một dải hai chiều, vì vậy chúng ta cần hai kích thước nội tại. Hãy gọi chúng là $ \ theta $, dao động từ $ 0 $ đến $ 2 \ pi $ xung quanh vòng lặp và $ w $ dao động từ -1 đến 1 trên chiều rộng của dải:

In [14]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
2

Bây giờ từ tham số này, chúng ta phải xác định vị trí (x, y, z) của dải nhúng.

Suy nghĩ về nó, chúng ta có thể nhận ra rằng có hai vòng quay xảy ra: một là vị trí của vòng lặp về trung tâm của nó (cái mà chúng ta gọi là $ \ theta $), trong khi cái còn lại là sự xoắn của dải về trục của nó (chúng ta 'll gọi đây là $ \ Phi $). Đối với một dải Möbius, chúng ta phải có dải tạo ra một nửa trong vòng lặp đầy đủ hoặc $ \ Delta \ Phi = \ Delta \ theta/2 $.

Bây giờ chúng tôi sử dụng hồi ức về lượng giác để rút ra sự nhúng ba chiều. Chúng tôi sẽ xác định $ R $, khoảng cách của mỗi điểm từ trung tâm và sử dụng điều này để tìm tọa độ $ (x, y, z) $: tọa độ:

Trong & nbsp; [16]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
3

Cuối cùng, để vẽ biểu đồ đối tượng, chúng ta phải đảm bảo rằng tam giác là chính xác. Cách tốt nhất để làm điều này là xác định phép tam giác trong các tham số cơ bản, và sau đó để cho matplotlib dự án tam giác này vào không gian ba chiều của dải Möbius. Điều này có thể được thực hiện như sau:

In [17]:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
4

Kết hợp tất cả các kỹ thuật này, có thể tạo và hiển thị một loạt các đối tượng và mẫu ba chiều trong matplotlib.

Chúng ta cũng có thể vẽ các bề mặt 3D trong Python, hàm để vẽ các bề mặt 3D là Plot_surface (X, Y, Z), trong đó X và Y là các mảng đầu ra từ Meshgrid và Z = F (X, Y) hoặc Z (I , j) = f (x (i, j), y (i, j)). Các hàm vẽ bề mặt phổ biến nhất là lướt và đường viền. THỬ NÓ! too, the function to plot the 3D surfaces is plot_surface(X,Y,Z), where X and Y are the output arrays from meshgrid, and Z=f(X,Y) or Z(i,j)=f(X(i,j),Y(i,j)). The most common surface plotting functions are surf and contour. TRY IT! too, the function to plot the 3D surfaces is plot_surface(X,Y,Z), where X and Y are the output arrays from meshgrid, and Z=f(X,Y) or Z(i,j)=f(X(i,j),Y(i,j)). The most common surface plotting functions are surf and contour. TRY IT!

ax = plt.axes (prejection = '3D') # Dữ liệu cho một dòng ba chiều Zline = np.linspace (0, 15, 1000) xline = np.sin (zline) yline = np.cos (zline) ax. Plot3d (Xline, Yline, Zline, 'Grey') # Dữ liệu cho các điểm phân tán ba chiều zdata = 15 * np.random.random (100) xdata = np.sin (zdata) + 0.1 * np.random.randn (100 ) Ydata ... # Data for a three-dimensional line zline = np.linspace(0, 15, 1000) xline = np.sin(zline) yline = np.cos(zline) ax.plot3D(xline, yline, zline, 'gray') # Data for three-dimensional scattered points zdata = 15 * np.random.random(100) xdata = np.sin(zdata) + 0.1 * np.random.randn(100) ydata ... # Data for a three-dimensional line zline = np.linspace(0, 15, 1000) xline = np.sin(zline) yline = np.cos(zline) ax.plot3D(xline, yline, zline, 'gray') # Data for three-dimensional scattered points zdata = 15 * np.random.random(100) xdata = np.sin(zdata) + 0.1 * np.random.randn(100) ydata ...

Matplotlib là một thư viện đồ họa 2D và 3D tuyệt vời để tạo ra các số liệu khoa học.2D and 3D graphics library for generating scientific figures.2D and 3D graphics library for generating scientific figures.