Python:Plotly 3D 曲面图

Mai*_*and 5 python matplotlib dataframe plotly

我很难绘制 Plotly 3d 曲面图。我有一个 4000 行和三列的大数据框。我确实在这里提问并得到了一些答案。当我尝试它们时,代码运行需要几个小时,但我看不到任何情节。我想确认我所做的是正确的。因为我是曲面图的新手。

我的代码:

import plotly.graph_objects as go
import plotly.graph_objs
import plotly
df = 
index     x           y           z
0        10.2        40.5        70.5            
1        30.5        30.2       570.5
.
.
4000     100.5       201.5      470.5

df['z']= [df['z'].tolist for x in df.index]
df = 
index     x           y           z
0        10.2        40.5       [70.5,570.5,..,470.5]            
1        30.5        30.2       [70.5,570.5,..,470.5]
.
.
4000     100.5       201.5      [70.5,570.5,..,470.5]

    zdata = [df['z'].tolist()]*len(df)
    plotly.offline.plot({"data":[go.Surface(x=df['x'].values,
                                            y=df['y'].values,
                                            z = df['z'].values)],
    "layout":plotly.graph_objs.Layout(title='Some data', autosize=False,
                      width=600, height=600,
                    scene = dict(xaxis_title='x',
                    yaxis_title='y',
                    zaxis_title='z'),
                      margin=dict(l=10, r=10, b=10, t=10))})
Run Code Online (Sandbox Code Playgroud)

如果有人向我澄清我为生成曲面图所做的工作是否正确,我将不胜感激?

S3D*_*DEV 4

这是一个简单/精简的3D 曲面图示例,希望可以帮助您入门。

这里的关键信息是:不要使事情过于复杂化。同样的逻辑在具有 4000 多行的 DataFrame 上应该没问题。(当然,它将绘制约 16M 数据点,因此需要一些时间)。

要记住的关键点是它z必须是 shape 的二维数组[x.shape[0], y.shape[0]]。本质上意味着,如果xy的长度为 10,则z必须具有以下形状:[10, 10]

由于我没有完整的数据集,因此我合成了数据 - 希望这可以用于说明目的。此外,为了简单起见,我numpy坚持使用 numpy 数组本质上是一个 DataFrame 列。

简单的例子:

import numpy as np
from plotly.offline import plot

n = 10
x = np.arange(n)
y = x
z = np.tile(x**2, [n, 1])

data = [{'x': x,
         'y': y,
         'z': z,
         'type': 'surface'}]

plot({'data': data}, filename='/path/to/graph.html')
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

还有一点更有趣:

n = 360
x = np.arange(n)
y = x
v = np.tile([np.sin(i*(np.pi/180)) for i in range(n)], [n, 1]).T
z = (v.T[0]*v)

data = [{'x': x,
         'y': y,
         'z': z,
         'type': 'surface'}]

plot({'data': data}, filename='/path/to/graph.html')
Run Code Online (Sandbox Code Playgroud)

您会注意到绘图逻辑是相同的。

输出:

在此输入图像描述