我有 3 个列表,一个 xs、ys 和 zs; xs 和 ys 是我为了可视化目的而创建的任意点,zs 是我想在此曲面图上绘制的概率 [0,1]。所有这三个列表都通过它们的索引进行匹配。我尝试使用这样的 pandas 数据框绘制它们,
df = pd.DataFrame({'xdata': xs, 'ydata': ys, 'zdata': zs})
fig = go.Figure(data=[go.Surface(z=df.values)])
结果如下图: 正如您所看到的,没有一个轴反映了我期望的 [0-1] 概率,但我假设它在 x 轴上,具体取决于它的正确程度。另外,其他两个轴只能是[-12,12],它反映在z轴上,而不反映在y轴上。所以我尝试通过这样做来明确轴:
df = pd.DataFrame({'xdata': xs, 'ydata': ys, 'zdata': zs})
fig = go.Figure(data=[go.Surface(
x=df['xdata'].values,
y=df['ydata'].values,
z=df[['xdata', 'ydata', 'zdata']].values)])
fig.update_layout(title="Probabilities")
但是,结果如下图: 在此图中,x 轴正确反映了概率轴,z 和 y 轴都正确反映了其余轴的域,但是这对我没有帮助,除非交换 x 和 z 轴。我已经尝试了 go.Surface 行和初始化数据帧的行中切换值的每种组合,但似乎没有任何效果。有谁知道我该如何解决这个问题?
我能够让我的图与三面图一起工作。我能想到的任何其他方法似乎都不起作用。这是我使用的方法,其中 x 和 y 是欧几里德点列表,z 是概率列表 [0,1]:
import plotly
import numpy as np
import plotly.express as px
import plotly.graph_objs as go
import plotly.figure_factory as ff
from scipy.spatial import Delaunay
x, y, z = format_prob_data()
points2D = np.vstack([x, y]).T
tri = Delaunay(points2D)
fig = ff.create_trisurf(x=x, y=y, z=z, simplices=tri.simplices)
fig.update_layout(title="Probabilities")
fig.write_html("file.html")