2016-02-17 55 views
5

Tôi muốn vẽ một bề mặt bằng một bản đồ màu, khung dây và đường viền sử dụng matplotlib. Một cái gì đó như thế này:Đường viền bề mặt và 3d trong matplotlib

enter image description here

Chú ý rằng tôi không hỏi về những đường nét nằm ở vĩ tuyến bay đến xy nhưng những người có 3D và trắng trong hình ảnh.

Nếu tôi đi theo cách ngây thơ và vẽ tất cả những điều này, tôi không thể thấy các đường bao (xem mã và hình ảnh bên dưới).

import numpy as np 
from mpl_toolkits.mplot3d import axes3d 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111, projection="3d") 
X, Y = np.mgrid[-1:1:30j, -1:1:30j] 
Z = np.sin(np.pi*X)*np.sin(np.pi*Y) 
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0.5, rstride=1, cstride=1) 
ax.contour(X, Y, Z, 10, lw=3, cmap="autumn_r", linestyles="solid", offset=-1) 
ax.contour(X, Y, Z, 10, lw=3, colors="k", linestyles="solid") 
plt.show() 

enter image description here

Nếu thêm tính minh bạch để các khía cạnh bề mặt sau đó tôi có thể thấy những đường nét, nhưng có vẻ thực sự lộn xộn (xem mã số và hình ảnh dưới đây)

import numpy as np 
from mpl_toolkits.mplot3d import axes3d 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111, projection="3d") 
X, Y = np.mgrid[-1:1:30j, -1:1:30j] 
Z = np.sin(np.pi*X)*np.sin(np.pi*Y) 
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0.5, rstride=1, cstride=1, alpha=0.5) 
ax.contour(X, Y, Z, 10, lw=3, cmap="autumn_r", linestyles="solid", offset=-1) 
ax.contour(X, Y, Z, 10, lw=3, colors="k", linestyles="solid") 
plt.show() 

enter image description here

Câu hỏi: Có cách nào để có được kết quả này trongkhông? Tuy nhiên, việc tô bóng là không cần thiết.

Trả lời

0

Tôi nghĩ rằng bạn muốn thiết lập bù đắp cho đường viền:

ax.contour(X, Y, Z, 10, offset=-1, lw=3, colors="k", linestyles="solid", alpha=0.5) 

Xem ví dụ này để biết thêm:

http://matplotlib.org/examples/mplot3d/contour3d_demo3.html

Và các tài liệu ở đây:

http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#contour-plots

bù đắp: Nếu cốt truyện chỉ định một dự báo của các đường đồng mức trên vị trí này trong mặt phẳng bình thường để zdir

Note, zdir = 'z' theo mặc định, nhưng bạn có thể dự án trong x hoặc y hướng được thiết lập zdir cho phù hợp.

+0

Không thực sự, điều này sẽ vẽ đường viền trong 2D . Nhưng không phải trong 3D như tôi muốn chúng. Xem hình ảnh ví dụ, nó có đường viền màu trắng. – nicoguaro

+1

Ah ok, xin lỗi tôi đã hiểu nhầm câu hỏi – tom

2

Rõ ràng nó là một lỗi, nếu bạn cố gắng này

import numpy as np 
from mpl_toolkits.mplot3d import axes3d 
import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111, projection="3d") 
X, Y = np.mgrid[-1:1:30j, -1:1:30j] 
Z = np.sin(np.pi*X)*np.sin(np.pi*Y) 


ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0, rstride=1, cstride=1) 
ax.contour(X, Y, Z+1, 10, lw=3, colors="k", linestyles="solid") 
plt.show() 

Và xoay xung quanh, bạn sẽ thấy những đường cong biến mất khi họ không nên

Các vấn đề liên quan