Hướng dẫn smooth 3d surface plot python - Trăn bề mặt 3D mượt mà

Từ liên kết bạn đã đề xuất, ví dụ ở đây có lẽ là gần nhất với những gì bạn muốn. Bạn có thể sử dụng ví dụ với các giá trị của mình,

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d, Axes3D

X, Y = np.mgrid[-1:1:20j, -1:1:20j]
Z = [X+Y] * np.exp[-6.0*[X*X+Y*Y]] + np.random.rand[X.shape[0]]

xnew, ynew = np.mgrid[-1:1:80j, -1:1:80j]
tck = interpolate.bisplrep[X, Y, Z, s=0]
znew = interpolate.bisplev[xnew[:,0], ynew[0,:], tck]

fig = plt.figure[figsize=[12,12]]
ax = fig.gca[projection='3d']
ax.plot_surface[X, Y, Z, cmap='summer', rstride=1, cstride=1, alpha=None]
plt.show[]

fig = plt.figure[figsize=[12,12]]
ax = fig.gca[projection='3d']
ax.plot_surface[xnew, ynew, znew, cmap='summer', rstride=1, cstride=1, alpha=None, antialiased=True]
plt.show[]

Ngoài ra, antialiased=True có thể làm cho nó trông đẹp hơn nhưng tôi nghĩ là theo mặc định. Cốt truyện đầu tiên trông như thế này,

Và cốt truyện được làm mịn như thế này,

Vấn đề với nhiễu tần số thấp trong dữ liệu của bạn là rất khó để xác định một lưới đủ tốt để giải quyết. Bạn có thể điều chỉnh mức độ làm mịn với đối số s thành interpolate.bisplrep hoặc có thể là hạt thô/lọc dữ liệu của bạn chỉ để lại các xu hướng chính [ví dụ: sử dụng scipy.ndimage.interpolation.zoom nếu bạn có dữ liệu thông thường]. Ngoài ra, hãy xem xét một loại lô khác như pcolormesh vì dữ liệu về cơ bản là 2D.

Ghi chú

Nhấn vào đây để tải xuống mã ví dụ đầy đủhere to download the full example code

Thể hiện việc sử dụng Hillshading tùy chỉnh trong cốt truyện bề mặt 3D.

# This import registers the 3D projection, but is otherwise unused.
from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import

from matplotlib import cbook
from matplotlib import cm
from matplotlib.colors import LightSource
import matplotlib.pyplot as plt
import numpy as np

# Load and format data
with cbook.get_sample_data['jacksboro_fault_dem.npz'] as file, \
     np.load[file] as dem:
    z = dem['elevation']
    nrows, ncols = z.shape
    x = np.linspace[dem['xmin'], dem['xmax'], ncols]
    y = np.linspace[dem['ymin'], dem['ymax'], nrows]
    x, y = np.meshgrid[x, y]

region = np.s_[5:50, 5:50]
x, y, z = x[region], y[region], z[region]

# Set up plot
fig, ax = plt.subplots[subplot_kw=dict[projection='3d']]

ls = LightSource[270, 45]
# To use a custom hillshading mode, override the built-in shading and pass
# in the rgb colors of the shaded surface calculated from "shade".
rgb = ls.shade[z, cmap=cm.gist_earth, vert_exag=0.1, blend_mode='soft']
surf = ax.plot_surface[x, y, z, rstride=1, cstride=1, facecolors=rgb,
                       linewidth=0, antialiased=False, shade=False]

plt.show[]

Từ khóa: Ví dụ về mã Matplotlib, Codex, Python Plot, Pyplot Gallery được tạo bởi Sphinx-Gallery

Làm thế nào để bạn vẽ một cốt truyện mượt mà trong Python?

Đặt kích thước hình và điều chỉnh phần đệm giữa và xung quanh các ô phụ ..
Tạo danh sách các điểm dữ liệu, x và y ..
Vẽ các điểm dữ liệu x và y ..
Tạo các điểm dữ liệu X_New và Bspline cho dòng trơn tru ..
Nhận điểm dữ liệu y_New. ....
Biểu đồ x_new và y_new các điểm dữ liệu bằng phương thức Plot [] ..

Làm thế nào để bạn vẽ một bề mặt 3D trong Python?

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Ó!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!

Rstride và Cstride là gì?

Các kwargs rstride và cstride đặt sải chân được sử dụng để lấy mẫu dữ liệu đầu vào để tạo biểu đồ.Nếu các mảng 1K 1K được truyền vào, các giá trị mặc định cho các sải chân sẽ dẫn đến một lưới 100x100 được vẽ.Mặc định là 10.set the stride used to sample the input data to generate the graph. If 1k by 1k arrays are passed in, the default values for the strides will result in a 100x100 grid being plotted. Defaults to 10.

Biểu đồ 3D có thể trong matplotlib không?

Matplotlib được giới thiệu trong tâm trí, chỉ có âm mưu hai chiều.Nhưng tại thời điểm phát hành 1.0 xảy ra, các tiện ích 3D đã được phát triển trên 2D và do đó, chúng tôi đã triển khai dữ liệu 3D có sẵn ngày hôm nay!Các sơ đồ 3D được bật bằng cách nhập bộ công cụ MPLOT3D.The 3d plots are enabled by importing the mplot3d toolkit.

Bài Viết Liên Quan

Chủ Đề