簡體   English   中英

如何使用 matplotlib 獲得穩定的繪圖

[英]How to get stable plot using matplotlib

我正在嘗試使用 matplotlib 繪制手的 3D 姿勢。 對於視頻的每一幀,或者我們可以說如果數據發生了變化,那么繪圖大小(X、Y、Z)也會隨着對象(手部姿勢)的大小和位置而變化。 下面的更多細節是包含下一幀和上一幀的兩個屏幕截圖,在屏幕截圖中我們可以看到 x、y 和 z 軸隨着手部姿勢的變化而變化。

圖片_1 圖片_2

我的問題是如何獲得一個穩定的圖,即使對象位置會改變,它的大小也不會改變。

下面的參考是另一張顯示穩定圖的圖像,我正在嘗試這樣做。 正如我們所看到的,輸入幀和對象大小正在變化,但繪圖大小相同。 無論對象大小是否會在繪圖中發生變化。

結果_圖像

下面是我的繪圖代碼。 請把它當作繪圖示例,我只分享繪圖代碼,因為問題出在繪圖代碼上。

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.view_init(elev=20, azim=75)
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
rgb_dict = get_keypoint_rgb(skeleton)
    
for i in range(len(skeleton)): # here is skeleton, just ignore it
    joint_name = skeleton[i]['name']
    pid = skeleton[i]['parent_id']
    parent_joint_name = skeleton[pid]['name']

    x = np.array([kps_3d[i, 0], kps_3d[pid, 0]]) # kps_3d is pose data
    y = np.array([kps_3d[i, 1], kps_3d[pid, 1]])
    z = np.array([kps_3d[i, 2], kps_3d[pid, 2]])

    ax.plot(x, z, -y, c = np.array(rgb_dict[parent_joint_name])/255., linewidth = line_width)
    ax.scatter(kps_3d[i, 0], kps_3d[i, 2], -kps_3d[i, 1], c = np.array(rgb_dict[joint_name]).reshape(1, 3)/255., marker='o')
    ax.scatter(kps_3d[pid, 0], kps_3d[pid, 2], -kps_3d[pid, 1], c = np.array(rgb_dict[parent_joint_name]).reshape(1, 3)/255., marker='o')

正如ax.scatter 文檔所示,它用於獲得y 與 x 的散點圖,其中標記大小和/或顏色不同

我可以使用哪個替代函數來獲得穩定的圖?

尋求一些有價值的建議。

嘗試通過這些代碼行設置繪圖限制:

ax.set_xlim3d(-0.1, 0.1)
ax.set_ylim3d(-0.1, 0.1)
ax.set_zlim3d(-0.1, 0.1)

根據需要調整數字。 您可能還需要調整視角:

ax.view_init(elev=28., azim=55)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM