无法删除matplotlib polycollection中的原点

ana*_*oly 7 python matplotlib

我在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()
Run Code Online (Sandbox Code Playgroud)

cge*_*cge 4

这是 PolyCollection 显式关闭功能的一个错误。

现在,将其关闭,您将得到我认为您期望的结果:

poly = PolyCollection(verts, facecolors = [cc('r'), cc('g'), cc('b'),
                                           cc('y')], closed=False)
Run Code Online (Sandbox Code Playgroud)

这里唯一的问题是,您在运行时不应该得到预期的结果,因为多边形不应该闭合。这是另一个与 3D 代码相关的错误。无论如何,这只会影响边缘周围的线,在您的示例中,它几乎没有任何区别(我最初认为它在增加线宽之前没有正确关闭)。

PolyCollection 使用 path.Path 对象来存储顶点,对于闭合多边形,使用 CLOSEPOLY 顶点代码,它可以干净地闭合路径(线条中没有重叠)。

PolyCollections 的 3D 投影代码似乎是一个 hack,它获取 PolyCollection,提取路径,从这些路径中获取顶点,丢弃这些顶点的代码并假设它们都是真实的顶点坐标,然后直接修改原始 PolyCollection 上的顶点以使用具有 2D 屏幕投影的新路径坐标且无代码的新路径...并且无论您的设置如何,都会关闭。

我已将其作为问题#2045提交。