编辑:修改最后4行代码的轴的xyz限制 现在,我只需要显示行长的答案。
好的这将是一个很长的问题。我想(1)显示从中心点到外围点的线的长度,以及(2)将轴坐标固定为具有0-6的y轴,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()
看起来像这样:(之后添加了红色文字,我希望这些更改看起来像)
答案 0 :(得分:1)
为了显示线的长度,您需要首先计算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()