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

matplotlib中plot_trisurf未设alpha却半透明,如何设为完全不透明?

解决Matplotlib 3D三角曲面半透明问题

问题原因

你遇到的曲面半透明情况,大概率是custom_colormap生成的颜色数组自带了alpha通道(透明度值),即便没显式设置alpha,这些默认的alpha参数也会让曲面呈现半透明效果。

修复方案

以下几种方法都能让曲面完全不透明:

方法1:移除颜色数组的alpha通道

如果custom_colormap返回的是RGBA格式(4通道)的颜色,直接截取前3个RGB通道即可:

# 只保留RGB通道,默认完全不透明
colors = custom_colormap(norm(fvalue))[..., :3]

方法2:设置facecolor时强制指定alpha

调用set_fc时显式传入alpha=1,覆盖颜色自带的透明度:

p3dc.set_fc(colors, alpha=1)

方法3:绘制时直接传入参数

更简洁的方式是在plot_trisurf中直接指定facecolors和alpha=1,省去后续设置步骤:

p3dc = ax.plot_trisurf(
    dataset.coord[0], dataset.coord[1], dataset.coord[2],
    triangles=dataset.tri,
    facecolors=colors,
    alpha=1
)

完整修改示例

这里用方法2修改你的代码:

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

norm = matplotlib.colors.Normalize()
fvalue = np.zeros(np.size(dataset.tri, 0))

for i in range(np.size(dataset.tri, 0)):
    tri = dataset.tri[i]
    fvalue[i] = dataset.var['T'][0, int(tri[0])]
colors = custom_colormap(norm(fvalue))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
p3dc = ax.plot_trisurf(dataset.coord[0], dataset.coord[1], dataset.coord[2], triangles=dataset.tri)
# 强制设置完全不透明
p3dc.set_fc(colors, alpha=1)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:35:09