2013-04-30 63 views
7

我已经尝试了一个来自matplotlib教程的PolyCollection的例子,并注意到一件奇怪的事情。我无法从轴原点中删除这些点,请参阅图。我如何管理这个?无法删除matplotlib polycollection中的原点

enter image description here

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() 
+0

气味像一个错误... – tacaswell 2013-04-30 19:00:17

+1

与3D代码的错误,添加到2D轴相同的工作集合给出了预期的结果。 – tacaswell 2013-04-30 19:04:20

+0

,我该如何处理这个错误? – anatoly 2013-05-04 20:19:33

回答

4

这是PolyCollection的明确关闭功能中的错误。

现在,把它们关掉,你会得到什么,我认为是结果你想到:

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

这里唯一的问题是,你不应得到预期而结果运行这个,因为多边形不应该关闭。这是另一个,与3D代码相关的错误。在任何情况下,这只影响边缘线,在你的例子中,它几乎没有任何区别(我原本以为它是正确的,直到我增加线宽才关闭)。

PolyCollection使用path.Path对象来存储顶点,对于封闭多边形,使用CLOSEPOLY顶点代码,它干净地关闭路径(在行中不重叠)。

PolyCollections的三维投影代码似乎是一个诡计,它需要你的PolyCollection,提取路径,从这些路径获取顶点,抛出那些顶点的代码,并假设它们都是真正的顶点坐标,并且然后直接修改原始PolyCollection上的顶点以使用具有2D屏幕的新路径投影坐标不带代码......并且无论您的设置如何,都会关闭。

我已经提出这个问题#2045

+0

这不帮助,问题依然存在。 绘制瀑布图的任何其他解决方案? – 2015-04-10 07:47:55

+1

我不知道它是什么没有帮助:这是一个关于解决现在在matplotlib中修复的错误的答案。当前版本应该使用或不使用'closed = False'。你正在运行什么版本的matplotlib? – cge 2015-04-10 21:23:31

+0

matplotlib 1.3.1和评论是关于'closed = False'没有解决问题的事实;绘制线被关闭,但是当使用'closed = False'时,matplotlib用连接第一个点到最后一个数据点的线关闭多边形。 (只是补充一点,我想绘制一系列曲线 - 线图) – 2015-04-12 22:03:46