PCA后2D直方图的简单3D条形图

时间:2014-01-17 16:27:23

标签: python numpy matplotlib plot histogram

我已经阅读了一些我可以在这里或其他地方找到的问题。我使用 stackoverflow 上提供的其他问题编写了代码,但有时它仍无效。可能会出现三种类型的问题。我先在这里编写代码,然后列出问题:

from matplotlib.mlab import PCA
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from matplotlib import pyplot as plt

fig=plt.figure()
ax=plt.subplot(111,projection='3d')
sample=np.asarray(sample)
result=PCA(sample)
hist, xedges, yedges =np.histogram2d(result.Y[:,0],result.Y[:,1])
x_data, y_data = np.meshgrid( np.arange(hist.shape[1]),np.arange(hist.shape[0]) )        
x_data = x_data.flatten()
y_data = y_data.flatten()
z_data = hist.flatten()
ax.bar3d( x_data,y_data,np.zeros(len(z_data)),1, 1, z_data )
fig.tight_layout()   
fig.savefig('3Dhist.eps')
plt.show()

1-第一个问题是以下错误:

LinAlgError: SVD did not converge 
     97 
     98 def _raise_linalgerror_svd_nonconvergence(err, flag):
---> 99     raise LinAlgError("SVD did not converge")
    100 
    101 def get_linalg_error_extobj(callback):

LinAlgError: SVD did not converge 

当我的所有矢量共享一个相等的坐标时它会上升,即它们已经位于同一平面上。显然PCA仍然可以有一个独特的答案,但它给出了上述错误。要测试它,您可以将样本设置为:

sample=[[ 0.,  0.2, 0. ],
 [ 0.4, 0.2, 0. ],
 [ 0.4, 0.4, 0. ],
 [ 0.,  0.2, 0. ],
 [ 0.6, 0.2, 0. ]]

2- (半解决:请参阅答案部分。)第二个问题是以下警告:

/Users/****/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/mpl_toolkits/mplot3d/axes3d.py:1673: RuntimeWarning: invalid value encountered in divide
  for n in normals])
/Users/****/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/colors.py:394: RuntimeWarning: invalid value encountered in greater
  if (c.ravel() > 1).any() or (c.ravel() < 0).any():
/Users/****/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/colors.py:394: RuntimeWarning: invalid value encountered in less
  if (c.ravel() > 1).any() or (c.ravel() < 0).any():

我不知道这个警告的原因,但这通常会在我从我的发行版中生成的大样本上升。

3-3问题是我无法以.png之外的任何其他格式保存它,否则它无效。澄清我使用的数组是numpy.float64

1 个答案:

答案 0 :(得分:0)

我已经为感兴趣的人找到了第二期的答案。似乎matplotlib中的3D绘图存在严重问题。你可以在这里查看: matplotlib bar3d clipping problems