无法在matplotlib polycollection中删除原点

7
我尝试了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()

1
3D代码存在一个bug,将相同的多边形集合添加到2D坐标轴中会产生预期的结果。 - tacaswell
我该如何处理这个 bug? - anatoly
我刚刚在这里发布了一个快速修复此问题的解决方案:http://stackoverflow.com/questions/19492007/odd-line-artefacts-appearing-in-matplotlib-mplot3d-plot-using-polycollection/ - tnorgd
1个回答

4

这是PolyCollection显式关闭功能的一个漏洞。

暂时关闭它,你将得到我认为你所期望的结果:

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

这里唯一的问题在于,当运行时,你期望得到的结果是错误的,因为多边形不应该被闭合。这是与3D代码相关的另一个错误。无论如何,这只影响到边缘周围的线条,在您的示例中几乎没有任何区别(我最初认为它正确地未被关闭,直到我增加了线宽)。
PolyCollection使用path.Path对象存储顶点,并对于闭合的多边形,使用CLOSEPOLY顶点代码来清晰地关闭路径(线条不重叠)。
PolyCollection的3D投影代码似乎是一个骗局,它取出您的PolyCollection,提取路径,从这些路径取出顶点,并且扔掉这些顶点的代码,假设它们都是真实的顶点坐标,然后直接修改原始PolyCollection上的顶点以使用有2D屏幕投影坐标的新路径...而且无论您的设置如何,都将闭合。
我已将此文件作为问题# 2045提交。

这并没有帮助,问题仍然存在。是否有其他绘制瀑布图的解决方案? - B.Kocis
1
我不确定是什么没有帮助:这是一个关于解决 matplotlib 中已经修复的 bug 的答案。当前版本应该可以使用 closed=False 或不使用都可以。您正在运行哪个版本的 matplotlib? - cge
matplotlib 1.3.1版本,评论指出closed=False并不能解决问题;绘制的线条被封闭了,然而当使用closed=False时,matplotlib会用一条连接第一个点和最后一个数据点的线来封闭多边形。(顺便补充一下,我想绘制一系列曲线 - 线图) - B.Kocis
这个问题和答案不是关于那个的;这是关于当 closed=True 时,数据中不再添加 (0,0) 的问题。 - cge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接