python 图上点之间的标记距离
Labeling distance between points on python plot
我在 pts.along 中列出了一个点列表,这些点用线连接起来形成一个四面体。我正在尝试找到一种方法来添加显示每个点之间的欧氏距离的标签。
fig = plt.figure()
ax = fig.gca(projection='3d')
# Plot points
pts = [(a,0,0),(b,0,0),(c1,c2,0),(z1,z2,z3)]
for p in pts:
ax.scatter(p[0], p[1], p[2], zdir='z', c='r')
# Plot tetrahedron
for a, b in itertools.product(pts, pts):
x = np.linspace(a[0], b[0], 100)
y = np.linspace(a[1], b[1], 100)
z = np.linspace(a[2], b[2], 100)
ax.plot(x, y, z)
感谢任何帮助。
您可以计算距离,然后使用 text
显示它们。
在这里它们正好落在直线上,但是有了 3D 绘图和投影,很难自动将它们放在更好的位置。另请注意,使用 product
会产生重复点,因此我只显示 d>0
.
的距离
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import itertools
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
# Plot points
a, b, c1, c2, z1, z2, z3 = 1, 2, 3, 4, 3, 6, 3
pts = [(a,0,0),(b,0,0),(c1,c2,0),(z1,z2,z3)]
for p in pts:
ax.scatter(p[0], p[1], p[2], zdir='z', c='r')
# Plot tetrahedron
for a, b in itertools.product(pts, pts):
x = np.linspace(a[0], b[0], 100)
y = np.linspace(a[1], b[1], 100)
z = np.linspace(a[2], b[2], 100)
d = np.sqrt( sum([(a[i]-b[i])**2 for i in (0, 1, 2)]) )
s = "%.2f" % d
m = [(a[i]+b[i])/2. for i in (0, 1, 2)]
ax.plot(x, y, z)
if d>0:
ax.text(m[0], m[1], m[2], s)
print a, b, s
plt.show()
我在 pts.along 中列出了一个点列表,这些点用线连接起来形成一个四面体。我正在尝试找到一种方法来添加显示每个点之间的欧氏距离的标签。
fig = plt.figure()
ax = fig.gca(projection='3d')
# Plot points
pts = [(a,0,0),(b,0,0),(c1,c2,0),(z1,z2,z3)]
for p in pts:
ax.scatter(p[0], p[1], p[2], zdir='z', c='r')
# Plot tetrahedron
for a, b in itertools.product(pts, pts):
x = np.linspace(a[0], b[0], 100)
y = np.linspace(a[1], b[1], 100)
z = np.linspace(a[2], b[2], 100)
ax.plot(x, y, z)
感谢任何帮助。
您可以计算距离,然后使用 text
显示它们。
在这里它们正好落在直线上,但是有了 3D 绘图和投影,很难自动将它们放在更好的位置。另请注意,使用 product
会产生重复点,因此我只显示 d>0
.
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import itertools
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
# Plot points
a, b, c1, c2, z1, z2, z3 = 1, 2, 3, 4, 3, 6, 3
pts = [(a,0,0),(b,0,0),(c1,c2,0),(z1,z2,z3)]
for p in pts:
ax.scatter(p[0], p[1], p[2], zdir='z', c='r')
# Plot tetrahedron
for a, b in itertools.product(pts, pts):
x = np.linspace(a[0], b[0], 100)
y = np.linspace(a[1], b[1], 100)
z = np.linspace(a[2], b[2], 100)
d = np.sqrt( sum([(a[i]-b[i])**2 for i in (0, 1, 2)]) )
s = "%.2f" % d
m = [(a[i]+b[i])/2. for i in (0, 1, 2)]
ax.plot(x, y, z)
if d>0:
ax.text(m[0], m[1], m[2], s)
print a, b, s
plt.show()