根据变量更改 Matplotlib 中的表面颜色

Change surface color in Matplotlib based on a variable

我使用 Matplotlib 绘制了一个简单的函数作为 3D 图。现在,我想创建一个颜色图,根据 uv 函数中导出的速度为其着色。为此,我想使用 c 中看到的函数。我应该怎么做呢?提前谢谢你。

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

x = np.linspace(-2, 2, 20)
y = np.linspace(-2, 2, 20)
X, Y = np.meshgrid(x, y)
h = np.exp(-X**2 - Y**2)            # plotted function
u = -2*X*np.exp(-X**2 - Y**2)       # speed in x-direction
v = -2*Y*np.exp(-X**2 - Y**2)       # speed in y-direction
c = np.sqrt(u**2 + v**2)            # colormap derives from this

fig = plt.figure(figsize = (8, 7), facecolor='white')
ax = fig.add_subplot(projection='3d')
ax.plot_surface(X, Y, h)

plt.show()

试试这个

from matplotlib import cm

fig = plt.figure(figsize = (8, 7), facecolor='white')
ax = fig.add_subplot(projection='3d')
surf = ax.plot_surface(X, Y, h, rstride=1, cstride=1, facecolors = cm.jet(c/np.amax(c)),
                       linewidth=0, antialiased=False)

plt.show()