You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为matplotlib plot_surface 3D图的XY平面凸起高亮换色?

如何为3D曲面的不规则凸起区域设置高亮颜色?

嘿,这个需求很容易实现!核心思路就是自定义每个曲面网格的颜色——通过标记你想要高亮的不规则区域,单独给这些区域分配醒目的颜色,其余区域保留原有的配色逻辑就行。下面是具体的实现步骤和修改后的代码:

实现思路

  1. 定义高亮区域:用条件判断生成一个掩码(mask),标记出XY平面上需要高亮的不规则区域(可以基于Z值高度,也可以直接指定XY坐标范围)
  2. 替换对应颜色:先按原逻辑生成基础配色,再用掩码定位到高亮区域,把这些位置的颜色替换成你想要的高亮色(比如红色、橙色)
  3. 保持原有绘图逻辑:剩下的3D曲面绘制代码不需要大改,只需要把修改后的颜色数组传入即可

修改后的完整代码

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

# Generate data example
X,Y = np.meshgrid(np.arange(-99,-90), np.arange(-200,250,50))
Z = np.zeros_like(X)
Z[:,0] = 100.
Z[4][7] = 10

# Normalize to [0,1]
Z = (Z-Z.min())/(Z.max()-Z.min())

# -------------------------- 关键修改部分 --------------------------
# 1. 定义高亮区域的掩码(这里提供两种方式,选一种适合你的即可)
# 方式1:基于Z值高度高亮(比如所有Z>0.05的凸起区域)
highlight_mask = Z > 0.05
# 方式2:基于XY坐标范围的不规则区域(比如X在(-95,-92)且Y在(0,100)的区域)
# highlight_mask = (X > -95) & (X < -92) & (Y > 0) & (Y < 100)

# 2. 生成基础配色
colors = cm.viridis(Z)
# 3. 给高亮区域替换颜色(这里用纯红色RGBA,你可以换成任何喜欢的颜色)
colors[highlight_mask] = [1, 0, 0, 1]  # RGBA格式:红,绿,蓝,透明度
# -----------------------------------------------------------------

rcount, ccount, _ = colors.shape
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, rcount=rcount, ccount=ccount, facecolors=colors, shade=False)
surf.set_facecolor((0,0,0,0))
plt.show()

代码说明

  • 你可以根据实际需求调整highlight_mask的条件:如果是基于高度的凸起,就用Z值判断;如果是特定的XY区域,就用坐标范围的逻辑组合
  • 高亮颜色可以自由修改,比如换成橙色[1, 0.5, 0, 1]、蓝色[0, 0, 1, 1],或者带透明度的半透明色(最后一个值设为0.5即可)
  • 原代码的shade=False保证颜色不会被光照影响,能准确显示你设置的自定义颜色

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

火山引擎 最新活动