gpt4 book ai didi

python - 在 Matplotlib 3D 散点图中显示线的长度

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:11 26 4
gpt4 key购买 nike

编辑:用最后 4 行代码修复了轴的 xyz 限制现在,我只需要显示行长度的答案。

好的,这将是一个很长的问题。我想(1)显示从中心点到外围点的线的长度,并(2)修复轴坐标以拥有一个包含 x 轴 0-6、y 轴 0-6 和 z 轴的框轴 0-6。

这是到目前为止的代码。我终于得到了正确的几何图形,但由于默认的调整包含框,它看起来一团糟。

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import math as m

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


x = [1, 5, 3, 3]
y = [1, 1, 1+(2* m.sqrt(3)), 1 +(2/3)*m.sqrt(3)]
z = [0, 0, 0, 4* m.sqrt(2)/m.sqrt(3)]

a = []
b = []
c = []
for item in x:
a.append(float(item))
for item in y:
b.append(float(item))
for item in z:
c.append(float(item))

r = np.array(a)
s = np.array(b)
t = np.array(c)

ax.set_xlabel("x axis")
ax.set_ylabel("y axis")
ax.set_zlabel("z axis")


ax.scatter(r,s,zs = t, s=200)

for x, y, z in zip(r, s, t):
ax.plot3D([x, 3], [y, 1+(2*(3**(1/2))/3)], [z, 4*(2**(1/2))/(3*(3**(1/2)))], 'b')

ax.set_ylim([0,6]). ##EDITED FIX TO AXES LABEL PROBLEM
ax.set_xlim([6,0])
ax.set_zlim([0,6])

plt.show()

看起来像这样:(后来添加了红色文本,这就是我希望更改的样子)

enter image description here

最佳答案

为了显示直线的长度,您需要首先通过计算 3D 空间中端点之间的(欧几里得)距离来计算该长度。
然后,您可以使用 ax.text(x,y,z, text, ...) 将文本标签(请参阅 definition here )添加到绘图中,如下所示:在 matplotlib demo page .

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import math as m

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

r = np.array([1., 5., 3., 3.])
s = np.array([1., 1., 1.+(2* m.sqrt(3)), 1. +(2./3.)*m.sqrt(3)])
t = np.array([0., 0., 0., 4.* m.sqrt(2)/m.sqrt(3)])

ax.set_xlabel("x axis")
ax.set_ylabel("y axis")
ax.set_zlabel("z axis")

tx = "The line is {:.2f} units long."

ax.scatter(r,s,zs = t, s=200)

for x, y, z in zip(r, s, t):
X = np.array([x, 3.])
Y = np.array( [y, 1.+(2.*(3**(1/2.))/3.)])
Z = np.array([z, 4.*(2**(1/2.))/(3.*(3.**(1/2.)))])
# calculate length of line
l = np.sqrt( np.diff(X)**2+np.diff(Y)**2+np.diff(Z)**2)
ax.plot3D(X, Y, Z, 'b')
# label the lines with the anchor at each line's center
ax.text(X.mean(), Y.mean(), Z.mean(), tx.format(l[0]), size=10,color="r")

ax.set_ylim([0,6])
ax.set_xlim([6,0])
ax.set_zlim([0,6])

plt.show()

enter image description here

关于python - 在 Matplotlib 3D 散点图中显示线的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41578464/

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