mplot3d更改默认(相反)着色

2024-06-16 11:25:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用plot_surface创建了一个具有上下部分的三维锥形结构,参见下面的代码。在观察角度azim=90.时,底部圆锥体左侧较浅,右侧较暗。如果“光源”来自左侧,那么顶部圆锥体也会出现同样的情况。但是,上面的圆锥体有相反的阴影,所以对于我选择的其他视角,它仍然是如此。在

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(3,4));
ax = fig.add_subplot(111,projection='3d')

theta = np.linspace(0,2*np.pi,360)
r = np.linspace(0,1,100)
T, R = np.meshgrid(theta, r)

X = R * np.cos(T)
Y = R * np.sin(T)
Zup = np.sqrt(X**2 + Y**2)

ax.plot_surface(X, Y, Zup, rstride=1, cstride=1, linewidth=0, 
               antialiased=True,alpha=0.7,color='orange')
ax.plot_surface(X, Y, -Zup, rstride=1, cstride=1, linewidth=0, 
               antialiased=True,alpha=0.7,color='orange')

ax.set_axis_off()
ax.view_init(elev=4., azim=90.)
ax.dist=6

fig.tight_layout(pad=0.)

在一定的角度(例如,azim=45)两个锥体看起来是均匀的,但我希望它们有一些(一致的)照明。提前谢谢。在

enter image description here


Tags: importplotasnpfigpltaxsurface
1条回答
网友
1楼 · 发布于 2024-06-16 11:25:13

有趣的是,我们必须将底部圆锥体参数改为X[::-1], Y[::-1], -Zup[::-1]以获得与顶部相同的着色效果。完整代码如下。在

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(2,2.6));
ax = fig.add_subplot(111,projection='3d')

theta = np.linspace(0,2*np.pi,360)
r = np.linspace(0,1,100)
T, R = np.meshgrid(theta, r)

X = R * np.cos(T)
Y = R * np.sin(T)
Zup = np.sqrt(X**2 + Y**2)

ax.plot_surface(X, Y, Zup, rstride=1, cstride=1, linewidth=0, 
antialiased=True,alpha=0.7,color='orange')
# fix here
# have to reverse the lists to get the same shading
ax.plot_surface(X[::-1], Y[::-1], -Zup[::-1], rstride=1, cstride=1, 
linewidth=0, antialiased=True,alpha=0.7,color='orange')

ax.set_axis_off()
ax.view_init(elev=4., azim=90.)
ax.dist=6

fig.tight_layout(pad=0.)

enter image description here

相关问题 更多 >