在绘图中创建3d表面图

时间:2019-07-28 11:11:16

标签: python plotly

我有以下数据:

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)

但是:

enter image description here

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

这是完整的代码:

fig = make_subplots(行= 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()

所以,我的问题是: -如何根据已有的数据创建光滑的表面? -关于布局我想念什么?

2 个答案:

答案 0 :(得分:0)

尝试使用docs(here)中的3D表面图。下面提供它的示例。我认为,您可以更改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()

答案 1 :(得分:0)

两个答案:

  1. surface迹线接受z的二维矩阵
  2. 3-d迹线绘制在layout.scene对象中,该对象与2-d笛卡尔子图不同