gpt4 book ai didi

Python 绘制 3d 向量

转载 作者:太空宇宙 更新时间:2023-11-03 13:31:04 24 4
gpt4 key购买 nike

假设我想获取以下三个 [x,y,z] 坐标:

[0.799319 -3.477045e-01 0.490093]

[0.852512 9.113778e-16 -0.522708]

[0.296422 9.376042e-01 0.181748]

并将它们绘制为向量,其中向量从原点 [0,0,0] 开始。我该怎么做呢?我一直在尝试使用 matplotlib 的箭袋,但我不断收到以下值错误:

ValueError: need at least one array to concatenate

这是我的代码(document_matrix_projections 是上面表示为矩阵的三个坐标):

D1, D2, D3 = zip(*document_matrix_projections)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.quiver(D1)
plt.show()

最佳答案

使用 matplolib 的 quiver() 的一个很好且漂亮的替代方法是使用具有交互优势的 plotly 进行绘图。以下函数可以使用 plotly 中的 Scatter3d() 绘制向量。在这里,向量有一个大点来标记方向,而不是箭头。

import numpy as np 
import plotly.graph_objs as go

def vector_plot(tvects,is_vect=True,orig=[0,0,0]):
"""Plot vectors using plotly"""

if is_vect:
if not hasattr(orig[0],"__iter__"):
coords = [[orig,np.sum([orig,v],axis=0)] for v in tvects]
else:
coords = [[o,np.sum([o,v],axis=0)] for o,v in zip(orig,tvects)]
else:
coords = tvects

data = []
for i,c in enumerate(coords):
X1, Y1, Z1 = zip(c[0])
X2, Y2, Z2 = zip(c[1])
vector = go.Scatter3d(x = [X1[0],X2[0]],
y = [Y1[0],Y2[0]],
z = [Z1[0],Z2[0]],
marker = dict(size = [0,5],
color = ['blue'],
line=dict(width=5,
color='DarkSlateGrey')),
name = 'Vector'+str(i+1))
data.append(vector)

layout = go.Layout(
margin = dict(l = 4,
r = 4,
b = 4,
t = 4)
)
fig = go.Figure(data=data,layout=layout)
fig.show()

绘图可以简单地完成,

p0 = [0.799319, -3.477045e-01, 0.490093]
p1 = [0.852512, 9.113778e-16, -0.522708]
p2 = [0.296422, 9.376042e-01, 0.181748]

vector_plot([p0,p1,p2])

上面的输出结果:

关于Python 绘制 3d 向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47319238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com