7

matplotlib チュートリアルの PolyCollection を使用して例を試してみたところ、1 つの奇妙なことに気付きました。この点を軸の原点から削除できませんでした。図を参照してください。どうすればこれを管理できますか?

ここに画像の説明を入力

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()
4

1 に答える 1

4

これは、PolyCollection の明示的な終了機能のバグです。

今のところ、これをオフにすると、期待どおりの結果が得られます。

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

ここでの唯一の問題は、ポリゴンを閉じてはならないため、実行中に期待する結果が得られないことです。これは、3D コードに関連する別のバグです。いずれにせよ、これはエッジの周りの線にのみ影響し、あなたの例ではほとんど違いはありません(線幅を増やすまで正しく閉じられないと思っていました)。

PolyCollection は path.Path オブジェクトを使用して頂点を格納し、閉じたポリゴンの場合は CLOSEPOLY 頂点コードを使用して、パスをきれいに閉じます (線に重なりはありません)。

PolyCollections の 3D プロジェクション コードは、PolyCollection を取得し、パスを抽出し、それらのパスから頂点を取得し、それらの頂点のコードを破棄して、それらがすべて実際の頂点座標であると想定し、次に直接変更するハックのようです。元の PolyCollection の頂点を使用して、コードなしで 2D 画面投影座標を持つ新しいパスを使用します...設定に関係なく、閉じられます。

これを issue #2045として提出しました。

于 2013-05-21T23:18:12.617 に答える