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
相关产品推荐
相关产品推荐

