颜色取决于(x,y,z)的参数化3D表面图

时间:2019-05-06 16:57:50

标签: python matplotlib plot

我想绘制一个在3d空间中参数化表面上给出的量(例如,球体上的温度分布)。我可以绘制球面的参数3D图(作为两个参数phitheta的函数),但是我不知道如何使构成球面的多边形的颜色取决于参数thetaphi(通常,多边形的颜色仅由多边形的z位置确定)。

这是一个用彩色图绘制圆环的基本示例:

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

angle = np.linspace(0, 2 * np.pi, 32)
theta, phi = np.meshgrid(angle, angle)
r, R = .25, 1.
X = (R + r * np.cos(phi)) * np.cos(theta)
Y = (R + r * np.cos(phi)) * np.sin(theta)
Z = r * np.sin(phi)

# Display the mesh
fig = plt.figure()
ax = fig.gca(projection = '3d')
ax.set_xlim3d(-1, 1)
ax.set_ylim3d(-1, 1)
ax.set_zlim3d(-1, 1)
ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1,cmap="hot")
plt.show()

但是,文件的颜色由图块的z位置给出,我希望颜色由函数f(x,y)给出。

有人知道我如何在Matplotlib中实现这种依赖性吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

好吧,如果有人在寻找解决此问题的方法,这是一个可能的解决方法:

可以使用关键字参数facecolors设置组成曲面图的各个面的颜色。以下代码将使用函数X**2+Y**2为参数化曲面的表面着色:

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

# Generate torus mesh
angle = np.linspace(0, 2 * np.pi, 32)
theta, phi = np.meshgrid(angle, angle)
r, R = .25, 1.
X = (R + r * np.cos(phi)) * np.cos(theta)
Y = (R + r * np.cos(phi)) * np.sin(theta)
Z = r * np.sin(phi)

colorfunction=(X**2+Y**2)
norm=colors.Normalize(colorfunction.min(),colorfunction.max())

# Display the mesh
fig = plt.figure()
ax = fig.gca(projection = '3d')
ax.set_xlim3d(-1, 1)
ax.set_ylim3d(-1, 1)
ax.set_zlim3d(-1, 1)
ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, facecolors=cm.jet(norm(colorfunction)))
plt.show()