如何解决Python:绘制3D表面图 简单示例:输出:有点有趣:输出:
我很难绘制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,470.5]
.
.
4000 100.5 201.5 [70.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多个行的DataFrame上,这种相同的逻辑应该很好。 (当然,它会绘制约1600万个数据点,因此会花费一些时间。)
要记住的关键点是z
必须是形状为[x.shape[0],y.shape[0]]
的二维数组。从本质上讲,如果x
和y
的长度为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')
输出:
有点有趣:
n = 360
x = np.arange(n)
y = x
v = np.tile([np.sin(i*(np.pi/180)) for i in range(n)],1]).T
z = (v.T[0]*v)
data = [{'x': x,filename='/path/to/graph.html')
您会注意到绘图逻辑是相同的。
输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。