python - python 中 3D 曲面图的颜色

标签 python matplotlib plot

我正在使用下一行来绘制 3D 表面:

surf = ax3.plot_surface(X, Y, Z, rstride=1, cstride=1, alpha=0.5, linewidth=0, cmap=cm.jet,antialiased=True)

现在颜色很好看,虽然有点鳞片状,不过还好。
但我想改变表面颜色 w.r.t.另一个数据,存储在 list 中:

m = [104.48, 111.73,109.93,139.95,95.05,150.49,136.96,157.75]

我正在尝试:

norm = cls.Normalize() # Norm to map the 'm' values to [0,1]
norm.autoscale(m)
cmap = cm.ScalarMappable(norm, 'jet')
surf = ax3.plot_surface(X, Y, Z, rstride=5, cstride=5, alpha=0.5, linewidth=0, color=cmap.to_rgba(m), antialiased=True)

但这会引发错误,因为 cmap.to_rgba 仅采用一维数组。 对于如何更改表面的 colormap 的任何建议,我们将不胜感激。

最佳答案

嗯,它看起来很糟糕,但我认为你可以适应它:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
my_col = cm.jet(np.random.rand(Z.shape[0],Z.shape[1]))

surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors = my_col,
        linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)

result plot 我不会使用 jet,而是使用一些线性颜色图,例如 cubehelix。您可以使用错误的颜色图轻松欺骗眼睛(关于该主题的 one of many posts)

关于python - python 中 3D 曲面图的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32413371/

相关文章:

python - 为 axes3d 创建表面数据

python - 如何使用 Pandas 绘制阴影条?

python - 修改matplotlib内置颜色

python - 即使loopCondition为False,requeSTLoop(loopCondition)也不会释放

python - 循环遍历目录以查找匹配的文件

python - 使用 Line2D 在 matplotlib 中绘制线条

python - 在 matplotlib 中绘制数字字符串值

matlab - 在 Matlab 中绘制 3D 向量

r - 在 ggplot2 中重新排序轴时,“eval(substitute(expr), e) : argument is missing, 中出现错误,无默认值”

python - 为 Popen() 调用最小化了 CMD 窗口?