Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:Plotly三维曲面打印_Python_Dataframe_Matplotlib_Plotly - Fatal编程技术网

Python:Plotly三维曲面打印

Python:Plotly三维曲面打印,python,dataframe,matplotlib,plotly,Python,Dataframe,Matplotlib,Plotly,我在绘制Plotly 3d曲面图时遇到了困难。我有一个4000行和三列的大数据框架。我确实在这里问了问题,得到了一些答案。当我尝试它们时,代码运行需要几个小时,但我看不到任何情节。我想确认我所做的是正确的。因为我不熟悉曲面图 我的代码: import plotly.graph_objects as go import plotly.graph_objs import plotly df = index x y z 0 10.2

我在绘制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))})

如果有人能告诉我生成曲面图的方法是正确的,我将不胜感激。

下面是一个简单的/简化的3D曲面图示例,希望能帮助您继续

这里的关键信息是:不要把它复杂化。在4000+行的数据帧上,同样的逻辑应该很好。(当然,它将绘制约16M个数据点,因此需要一些时间)

要记住的关键点是
z
必须是形状
[x.shape[0],y.shape[0]]
的2d数组。从本质上说,如果
x
y
长度为10,则
z
的形状必须为:
[10,10]

由于我没有您完整的数据集,我已经合成了数据-希望这可以用于说明目的。此外,为了简单起见,我一直使用
numpy
,记住numpy数组本质上是一个数据帧列

简单的例子: 输出:

更有趣的事: 您将注意到打印逻辑是相同的

输出:

如何将
z
列中的数据转换为所需形状的二维数组?这和我已经做的一样吗?还是别的什么?你能从这个角度解释吗?如果所有数组的长度都相同:一个简单的方法是:
z=np.tile(x[x.shape[0],1])
。如果
x
长度为10,则这将将
x
数组“平铺”(或复制)成
[10,10]
的形状。这就是我在示例中使用的方法。但是,通常使用3D曲面图,您将拥有
x*y
(就数组长度而言)的
z
数据点。如果
z
的形状是
x*y
:使用
np.reformate([x.shape[0],y.shape[0]])
使用
x
y
的长度来重塑
z
数组的形状。这仍然让我感到困惑。在我的问题中,我修改列
z
的方式,是正确的还是错误的?我是说,我把它改成了x和y尺寸?右请注意,使用
to\u numpy()
而不是
tolist()
应该会更快。(只运行了1000条记录,速度快了约6倍)。简单到:
df['z']=[df['z'].to_numpy(),for_uuuin df.index]
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')
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')