如何使用Matplotlib在3D曲面图上绘制置信区间上下界
3D曲面置信区间可视化实现方案
完全可以实现类似2D填充效果的3D置信区间展示,这里提供两种常用的实现思路,可根据展示需求选择:
方案1:半透明上下界曲面叠加
这是最简洁的实现方式,直接绘制主曲面、上界曲面、下界曲面,将上下界曲面的透明度调低,就能直观展示区间范围,修改后的完整代码如下:
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter interval = np.random.normal(0, 1, size=(100, 100)) x = np.arange(0.1,1.1,0.01) y = np.linspace(-np.pi,np.pi,100) X,Y = np.meshgrid(x,y) result = [] for i,j in zip(X,Y): result.append(np.log(i)+np.sin(j)) result = np.array(result) upper_bound = result + interval lower_bound = result - interval fig = plt.figure() fig.set_figwidth(20) fig.set_figheight(6) ax = fig.gca(projection='3d') # 绘制主结果曲面 surf = ax.plot_surface(X, Y, result, cmap=cm.Blues, alpha=0.8) # 绘制半透明置信区间上下界曲面 ax.plot_surface(X, Y, upper_bound, color='lightgray', alpha=0.2) ax.plot_surface(X, Y, lower_bound, color='lightgray', alpha=0.2) ax.zaxis.set_major_locator(LinearLocator(10)) ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) fig.colorbar(surf, shrink=0.5, aspect=5) plt.show()
方案2:带侧面围挡的封闭区间填充
如果想要更接近2D填充的封闭效果,可以额外绘制上下界曲面之间的四个侧边,形成封闭的半透明区间体,展示效果更清晰。在方案1代码的基础上,绘制完三个曲面后添加以下代码即可:
# 绘制y最小值方向的侧边 ax.plot_surface(X[:, 0:1], Y[:, 0:1], np.linspace(lower_bound[:,0], upper_bound[:,0], 100).T, color='lightgray', alpha=0.2) # 绘制y最大值方向的侧边 ax.plot_surface(X[:, -1:], Y[:, -1:], np.linspace(lower_bound[:,-1], upper_bound[:,-1], 100).T, color='lightgray', alpha=0.2) # 绘制x最小值方向的侧边 ax.plot_surface(X[0:1, :], Y[0:1, :], np.linspace(lower_bound[0,:], upper_bound[0,:], 100), color='lightgray', alpha=0.2) # 绘制x最大值方向的侧边 ax.plot_surface(X[-1:, :], Y[-1:, :], np.linspace(lower_bound[-1,:], upper_bound[-1,:], 100), color='lightgray', alpha=0.2)
可调整的参数说明:
- 修改
alpha参数可以调整半透明效果的强弱,避免遮挡主曲面 - 修改
color或cmap参数可以调整配色,适配不同的展示风格 - 不需要围挡时直接删除对应侧边绘制代码即可
内容的提问来源于stack exchange,提问作者John_maddon
相关产品推荐
相关产品推荐

