python - 置信区间 3 维图
问题描述
我有一个 3 维图,我可以使用下面编写的代码来绘制它。
考虑到我的点分布由 100x100 矩阵表示,是否可以在我的数据上绘制置信区间?在下面的代码中,我的数据称为“结果”,而我要显示的上限和下限称为“upper_bound”和“lower_bound”。
例如,我问是否存在这样的东西,但是在 3 维中(而不是像下图那样的 2 维)
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))
upper_bound = np.array(result)+interval
lower_bound = np.array(result)-interval
fig = plt.figure()
fig.set_figwidth(20)
fig.set_figheight(6)
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, np.array(result))
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
解决方案
使用 plotly 图形对象查看这个 3d 曲面图:
import plotly.graph_objects as go
import numpy as np
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))
upper_bound = np.array(result)+1
lower_bound = np.array(result)-1
fig = go.Figure(data=[
go.Surface(z=result),
go.Surface(z=upper_bound, showscale=False, opacity=0.3,colorscale='purp'),
go.Surface(z=lower_bound, showscale=False, opacity=0.3,colorscale='purp'),
])
fig.show()
这绘制了 3 个表面,一个用于您的结果和 2 个边界。但是,如果您想要看起来更像填充体积的东西,则必须添加具有缩放不透明度的体积图。
推荐阅读
- python - 在 gcloud -django 上上传图片时没有名为“config”的模块
- sapui5 - 预期为 '}' 而在表达式中看到 '='
- java - 使用 Canvas 正确绘制点
- cordova - 科尔多瓦 - 状态栏中的图像
- scala - 如何在 play framework 2.5 中将 DBApi 注入到 trait 组件中?
- c# - 如何在后台运行异步任务?
- ruby-on-rails - 多选多选 Ruby on Rails 不创建关联记录
- visual-studio-code - 旧产品图标?
- python - 带有seaborn的for循环不显示所有图
- apache-kafka-streams - Kafka Streams - 状态存储的卷导致“无法删除状态目录”错误