考虑使用以下代码(只是下面的蓝色形状)获得的伪球形的图
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
'''
==========================================
Ploting S^n_1
'''
fig = plt.figure(figsize=plt.figaspect(1))
ax = fig.add_subplot(111, projection='3d')
r=1
u=np.linspace(-2,2,200)
v=np.linspace(0,2*np.pi,60)
[u,v]=np.meshgrid(u,v)
a = 1
b = 1
c = 1
x = a*np.cosh(u)*np.cos(v)
y = b*np.cosh(u)*np.sin(v)
z = c*np.sinh(u)
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='#428bca')
ax.set_axis_off()
plt.show()
我发现发现形状的内部和外部之间的差异并不容易。因此,我想将内饰换成另一种颜色。有什么想法可以做到吗?
答案 0 :(得分:3)
应用@Guimoute的建议,我想出了一些更容易阅读的东西。这是上面代码中唯一修改的行
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='#428bca', edgecolor='#003366')
我在其中添加了自变量edgecolor
,以便在网格和形状的表面之间具有更大的对比度。结果如下:(我还将双曲线的蓝色/绿色更改为红色)
PS
(如果有其他人提出某些建议,我不会(只是)接受)作为答案。
答案 1 :(得分:1)
由于matplotlib 3D无法执行大量实际3D操作。这里使用简单的技巧。曲面分为两部分,并用不同的颜色绘制。最后,仔细设置视角以渲染图像。
这是工作代码(根据您的代码):
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=plt.figaspect(1))
fig.set_size_inches([8,8])
ax = fig.add_subplot(111, projection='3d')
#r=1
# values for extents of meshes
begp = 0.25
endp = 1+begp
extp = endp+1
u = np.linspace(-2, 2, 200)
#v = np.linspace(0, 2*np.pi, 60)
v = np.linspace(begp*np.pi, endp*np.pi, 30)
[u,v] = np.meshgrid(u,v)
u2 = np.linspace(-2, 2, 200)
v2 = np.linspace(endp*np.pi, extp*np.pi, 30)
[uu2, vv2] = np.meshgrid(u2, v2)
a = 1
b = 1
c = 1
# surface 1
x = a*np.cosh(u)*np.cos(v)
y = b*np.cosh(u)*np.sin(v)
z = c*np.sinh(u)
# surface 2
x2 = a*np.cosh(uu2)*np.cos(vv2)
y2 = b*np.cosh(uu2)*np.sin(vv2)
z2 = c*np.sinh(uu2)
# plot surface 1 in red / surface 2 in blue
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='red', edgecolor='gray')
ax.plot_surface(x2, y2, z2, rstride=4, cstride=4, color='blue', edgecolor='lightgray')
# set viewing angle + perspactive to get best image
ax.azim = 313 # z rotation (default=270)
ax.elev = 16 # x rotation (default=0)
ax.dist = 8 # zoom (define perspective)
ax.set_axis_off()
plt.show()
生成的图像: