簡體   English   中英

無法刪除matplotlib polycollection中的原點

[英]couldn't remove origin point in matplotlib polycollection

我在matplotlib教程中嘗試了PolyCollection的一個例子,並注意到一件奇怪的事情。 我無法從軸原點移除這些點,見圖。 我該如何管理?

在此輸入圖像描述

from mpl_toolkits.mplot3d import Axes3D
from matplotlib.collections import PolyCollection
from matplotlib.colors import colorConverter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')

cc = lambda arg: colorConverter.to_rgba(arg, alpha=0.6)

xs = np.arange(5, 10, 0.4)
verts = []
zs = [0.0, 1.0, 2.0, 3.0]
for z in zs:
    ys = np.random.rand(len(xs))
    ys[0], ys[-1] = 0.1, 0
    verts.append(list(zip(xs, ys)))

poly = PolyCollection(verts, facecolors = [cc('r'), cc('g'), cc('b'),
                                           cc('y')])
poly.set_alpha(0.7)
ax.add_collection3d(poly, zs=zs, zdir='y')

ax.set_xlabel('X')
ax.set_xlim3d(0, 10)
ax.set_ylabel('Y')
ax.set_ylim3d(-1, 4)
ax.set_zlabel('Z')
ax.set_zlim3d(0, 1)

plt.show()

這是PolyCollection顯式關閉功能的錯誤。

現在,關閉它,你會得到我認為你期望的結果:

poly = PolyCollection(verts, facecolors = [cc('r'), cc('g'), cc('b'),
                                           cc('y')], closed=False)

這里唯一的問題是你不應該在運行它時得到你期望的結果,因為不應該關閉多邊形。 這是與3D代碼相關的另一個相關錯誤。 在任何情況下,這只影響邊緣周圍的線,在你的例子中它幾乎沒有任何區別(我原本以為它是正確的,直到我增加線寬才關閉)。

PolyCollection使用path.Path對象來存儲頂點,對於閉合多邊形,使用CLOSEPOLY頂點代碼,它完全關閉路徑(在行中沒有重疊)。

PolyCollections的3D投影代碼似乎是一個hack,它采用PolyCollection,提取路徑,從這些路徑獲取頂點,拋棄那些頂點的代碼並假設它們都是真正的頂點坐標,然后直接修改原始PolyCollection上的頂點使用具有2D屏幕投影坐標但沒有代碼的新路徑...並且無論您的設置如何,都將關閉。

我已將此作為問題#2045提交。

暫無
暫無

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

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