我尝试使用matplotlib中3d曲面图的colormap特性,根据另一个数组的值而不是z值来为曲面着色。曲面图的创建和显示如下:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def gauss(x, y, w_0):
r = np.sqrt(x**2 + y**2)
return np.exp(-2*r**2 / w_0**2)
x = np.linspace(-100, 100, 100)
y = np.linspace(-100, 100, 100)
X, Y = np.meshgrid(x, y)
Z = gauss(X, Y, 50)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.plot_surface(X, Y, Z, cmap='jet')
现在,代替基于3d表面的高程着色,我希望以另一个数组的形式提供表面的颜色数据,这里作为一个随机的例子:
color_data = np.random.uniform(0, 1, size=(Z.shape))
然而,我没有找到一个解决方案来着色3d表面的基础上这些值。理想情况下,它看起来像3D轮廓图,只是在3D表面上。
1条答案
按热度按时间ssgvzors1#
您可以使用
matplotlib.colors.from_levels_and_colors
获得颜色Map和归一化,然后将它们应用于要进行颜色Map的值。