You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使Matplotlib 3D曲面图的edgecolors随z值变化?

解决方案

需求1:根据z值阈值设置边缘颜色

通过np.where根据z的取值生成对应颜色矩阵,实现z<0.5时边缘为白色、z≥0.5时边缘为黑色的效果:

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

x = np.linspace(-1, 1, 20)
y = np.linspace(-1, 1, 20)
x, y = np.meshgrid(x, y)
z = np.sin(x**2 + y**2)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')

# 根据z值生成边缘颜色矩阵
edge_colors = np.where(z < 0.5, 'w', 'k')
ax.plot_surface(x, y, z, cmap=cm.coolwarm, edgecolors=edge_colors)

plt.show()

需求2:边缘颜色随z值平滑过渡

先将z值归一化到0-1区间,再基于灰度色盘生成从白色(z=0)到黑色(z=1)的平滑过渡颜色:

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

x = np.linspace(-1, 1, 20)
y = np.linspace(-1, 1, 20)
x, y = np.meshgrid(x, y)
z = np.sin(x**2 + y**2)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')

# 归一化z值到0-1区间
norm = colors.Normalize(z.min(), z.max())
# 生成从白到黑的平滑过渡颜色:灰度值1对应白色,0对应黑色,因此用1减去归一化后的值
edge_colors = plt.cm.gray(1 - norm(z))
ax.plot_surface(x, y, z, cmap=cm.coolwarm, edgecolors=edge_colors)

plt.show()

内容的提问来源于stack exchange,提问作者feetwet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:14:59