在Plotly中创建3D曲面图

5

我有以下数据:

enter image description here

我想绘制x=long,y=short,z=balance

我已按如下方式进行:

fig.add(go.Scatter3d(x=results['long'], y=results['short'], z=results['balance']))

我得到了这样的结果:

enter image description here

我真正想要的是一个类似这个例子的表面:

enter image description here

所以,按照这个例子的代码,我做了以下操作:

fig.add_surface(x=results['long'], y=results['short'], z=results['balance'], row=2, col=1)

但是:

在此输入图片描述

它不仅没有显示任何数据,似乎还完全忽略了子图布局并覆盖了所有内容。

以下是完整的代码:

fig = make_subplots(rows=2, cols=1, specs=[[{'type': 'xy'}], [{'type': 'scene'}]])

fig.add_trace(go.Scatter(x=series1['timestamp'], y=series1['data'], line_color='red', name='series 1'), row=1, col=1)
fig.add_trace(go.Scatter(x=series2['timestamp'], y=series2['data'], line_color='blue', name='series 2'), row=1, col=1)
fig.update_yaxes(title_text="USD", row=1, col=1)

fig.add_surface(x=results['long'], y=results['short'], z=results['balance'], row=2, col=1)
fig.show()

因此,我的问题是:

  • 我如何从我拥有的数据中创建一个平滑的表面?
  • 关于布局,我错过了什么?

你能画出来吗?我也遇到了同样的问题。对我来说,问题在于我的曲面是参数曲面 (x(u,v),y(u,v),z(u,v)),所以用任何标准方法重新调整 z 都会失去函数关系。 - Ricardo Acuna
@RicardoAcuna,那是2年前的事了,我完全不记得解决方案可能是什么了,抱歉。 - Thomas
2个回答

2

两个答案:

  1. surface图形接受一个二维矩阵作为z参数
  2. 三维图形在layout.scene对象中绘制,该对象与二维笛卡尔子图不同
"Original Answer"翻译成"最初的回答"

有没有一个对象层次结构和场景如何组装的图表?我知道这有点像新手问题,但我很难想象每个部分属于什么以及在管道中每个部分的位置。 - Thomas
暂时还没有...我正在撰写一份高层次的文档来解释结构,但我们还没有完成! - nicolaskruchten

-2

尝试一下来自文档(这里)的三维表面绘图。以下是示例。我认为,您可以更改z_data - 这就是你所需要的:

import plotly.graph_objects as go

import pandas as pd

# Read data from a csv
z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')

fig = go.Figure(data=[go.Surface(z=z_data.values)])

fig.update_layout(title='Mt Bruno Elevation', autosize=False,
                  width=500, height=500,
                  margin=dict(l=65, r=50, b=65, t=90))

fig.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接