下面的代码表示了一个图形的绘制,该图形对应于读取一个n行的文本文件。每行包含4列,前三列是(x,y,z)点的坐标,第四列是此绘图不需要的二进制变量。
每读取20行,就读取一个骨架,该骨架是一组20 (x,y,z)点或关节,每个关节由每行的前三列组成。
文本文件包含860行,860/20 = 43,即创建(x,y,z)关节骨架的关节数为20。然后,文本文件由43个骨架组成,生成一个运动。因此,该文本文件表示一个运动。
在绘制骨架时,只采用两个坐标(x,y)来生成2D骨架,因此忽略了第三个坐标。并且,绘图已经在循环中,但按键事件部分尚未实现,当当前画布关闭时,将绘制下一个骨架。
我已经在下面发布了两张连续两张画布的照片。在绘制画布二之前,必须先关闭画布一。我需要将该代码与一个按键事件相关联,例如:如果按下右箭头键,则绘制下一个骨架,否则,永远不会显示下一个骨架,但不必通过close a canvas来绘制下一个骨架。
第一个绘图画布:https://i.stack.imgur.com/XxsNZ.png
连续绘图的画布,在关闭第一个后显示:https://i.stack.imgur.com/a1P8L.png
代码:
import matplotlib.pyplot as plt
import numpy as np
movement = np.loadtxt("file01.txt")
bone_list = [[1, 3], [2, 3], [3, 4], [4, 7], [5, 7], [6, 7], [1, 8], [2, 9], [8, 10], [9, 11], [10, 12], [11, 13], [5, 14], [6, 15], [14, 16], [15, 17], [16, 18], [17, 19], [3, 20]]
bone_list = np.array(bone_list) - 1
number_of_postures = int(len(movement)/20)
for i in range(number_of_postures):
fig, ax = plt.subplots(1, figsize=(3, 8))
plt.title('Skeleton')
plt.xlim(100, 180)
plt.ylim(-250, 0)
skeleton = movement[i*20:(i+1)*20]
x = skeleton[:, 0]
y = -skeleton[:, 1]
sc = ax.scatter(x, y, s=40)
for bone in bone_list:
ax.plot([x[bone[0]], x[bone[1]]], [y[bone[0]], y[bone[1]]], 'r')
plt.show()
https://stackoverflow.com/questions/51486099
复制相似问题