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

Matplotlib 3D曲面重叠元素辨识度提升:阴影添加及优化方案咨询

提升matplotlib 3D曲面特征辨识度的方案
  • 优化光照阴影参数
    你已经用到的LightSource方案可以进一步调整参数提升效果:调整光源方位角azdeg、高度角altdeg匹配你的峰值分布,添加vert_exag参数放大高度起伏的阴影感知,指定blend_mode调整明暗混合效果,修改后示例代码如下:
from matplotlib.colors import LightSource
import numpy as np

z_data = np.abs(I_surf[xlim_min:xlim_max, ylim_min:ylim_max])
ls = LightSource(azdeg=315, altdeg=45) # 可调整azdeg在0~360区间找到最适配的光照角度
rgb = ls.shade(
    z_data, 
    cmap=plt.cm.inferno,
    vert_exag=2, # 数值越大高度起伏的阴影强化效果越明显
    blend_mode='soft' # 可选'hard'/'soft',soft模式明暗过渡更自然
)
surf = ax.plot_surface(
    X_vals, T_vals, 
    z_data, 
    linewidth=0, 
    antialiased=False, 
    cstride=1, 
    rstride=1, 
    facecolors=rgb
)
  • 添加辅助参考元素
    可以叠加2D投影类元素辅助定位峰值:
  1. 给曲面添加极细的网格线区分相邻区块:将plot_surface的linewidth设为0.1~0.2,edgecolor设为浅灰色#eeeeee即可,不会干扰主色彩展示
  2. 在z轴底面投影等高线,和曲面峰值形成对应关系:
z_min = np.min(z_data)
ax.contour(X_vals, T_vals, z_data, zdir='z', offset=z_min, cmap='inferno', linewidths=1)
  • 优化色彩映射规则
    如果峰值数值接近导致色差小,可以通过归一化规则拉伸色彩区间:
from matplotlib.colors import PowerNorm, LogNorm

# 用PowerNorm放大高值区的色差,gamma<1时高值区间色彩区分度更高
norm = PowerNorm(gamma=0.6, vmin=np.min(z_data), vmax=np.max(z_data))
# 如果数值跨度大可以用LogNorm,注意加极小值避免出现0值报错:
# norm = LogNorm(vmin=z_data.min()+1e-6, vmax=z_data.max())
rgb = ls.shade(z_data, cmap=plt.cm.inferno, norm=norm, vert_exag=2)
  • 调整画布和视角参数
    拉伸z轴比例、调整观测视角减少峰值遮挡:
# 调整三个轴的显示比例,格式为(x比例, y比例, z比例),增大z轴比例可让高度起伏更明显
ax.set_box_aspect((1, 1, 1.5))
# 调整观测角度,elev是俯仰角,azim是方位角,可多试几个角度避免前后峰值遮挡
ax.view_init(elev=35, azim=300)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:57:03