2010-04-22 10 views
1

J'ai deux tableaux et je prends leurs journaux. Quand je fais cela et essayer de tracer leur nuage de points, je reçois cette erreur:erreur lors de la création d'un tableau log'd dans matplotlib/scipy/numpy

File "/Library/Python/2.6/site-packages/matplotlib-1.0.svn_r7892-py2.6-macosx-10.6-universal.egg/matplotlib/pyplot.py", line 2192, in scatter 
    ret = ax.scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, faceted, verts, **kwargs) 
    File "/Library/Python/2.6/site-packages/matplotlib-1.0.svn_r7892-py2.6-macosx-10.6-universal.egg/matplotlib/axes.py", line 5384, in scatter 
    self.add_collection(collection) 
    File "/Library/Python/2.6/site-packages/matplotlib-1.0.svn_r7892-py2.6-macosx-10.6-universal.egg/matplotlib/axes.py", line 1391, in add_collection 
    self.update_datalim(collection.get_datalim(self.transData)) 
    File "/Library/Python/2.6/site-packages/matplotlib-1.0.svn_r7892-py2.6-macosx-10.6-universal.egg/matplotlib/collections.py", line 153, in get_datalim 
    offsets = transOffset.transform_non_affine(offsets) 
    File "/Library/Python/2.6/site-packages/matplotlib-1.0.svn_r7892-py2.6-macosx-10.6-universal.egg/matplotlib/transforms.py", line 1924, in transform_non_affine 
    self._a.transform(points)) 
File "/Library/Python/2.6/site-packages/matplotlib-1.0.svn_r7892-py2.6-macosx-10.6-universal.egg/matplotlib/transforms.py", line 1420, in transform 
    return affine_transform(points, mtx) 
ValueError: Invalid vertices array. 

le code est tout simplement:

myarray_x = log(my_array[:, 0]) 
myarray_y = log(my_array[:, 1]) 
plt.scatter(myarray_x, myarray_y) 

idée de ce que pourrait être la cause? Merci.

+2

vous devez spécifier plus d'informations. Par exemple, regardez 'myarray_x',' myarray_y' avant d'appeler 'plt.scatter' –

Répondre

5

Nouvelle réponse:

De la recherche à la source, cette erreur est levée si le tableau des points passés dans affine_transform est des dimensions incorrectes ou si elle est vide. Voici les lignes concernées:

if (!vertices || 
     (PyArray_NDIM(vertices) == 2 && PyArray_DIM(vertices, 1) != 2) || 
     (PyArray_NDIM(vertices) == 1 && PyArray_DIM(vertices, 0) != 2)) 
     throw Py::ValueError("Invalid vertices array."); 

Jetez un oeil sur les dimensions de votre myarray_x et des tableaux myarray_y avant d'aller de l'avant peut-être.

Old Réponse:

Mon meilleur deviner que vous prenez le journal des valeurs < = 0. Cela (dans le cas d'être égal à 0) est soit vous donner nan ou -infs dans votre tableaux qui, bien sûr, il ne peut pas tracer.

(wiso est juste si - ces points sont ignorés)

+0

Ding ding ding .... ça sonne comme quoi" ValueError: Invalid verteices array. " essaie de dire. – Karl

+2

@Jusint: Non. Ces valeurs sont ignorées lors du traçage –

+0

@Justin, cela aurait du sens, mais ce n'est pas ce que fait pyplot; au moins dans des circonstances normales, pyplot ignore simplement de telles valeurs. Par exemple, si je cours en tentant de reproduire avec 'my_array = array ([[1.0, 2.0], [3.0, 4.0], [-5.0, 0.0]])' à la place, il ne génère pas cette erreur pour moi, mais plutôt tracer un graphique avec seulement deux points. –

4

Cela va pour moi avec succès

>>> from numpy import log, array 
>>> import matplotlib.pyplot as plt 
>>> my_array = array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) 
>>> my_array 
array([[ 1., 2.], 
     [ 3., 4.], 
     [ 5., 6.]]) 
>>> myarray_x = log(my_array[:, 0]) 
>>> myarray_y = log(my_array[:, 1]) 
>>> plt.scatter(myarray_x, myarray_y) 
<matplotlib.collections.CircleCollection object at 0x030C7A10> 
>>> plt.show() 

donc peut-être le problème est quelque chose que vous nous avez pas montré. Pouvez-vous fournir un code complet exactement comme vous l'avez exécuté afin que nous puissions reproduire votre problème?

7

J'ai eu le même problème que je fixai récemment:

Le problème pour moi est que mon X et les tableaux Y (numpy) ont été faites jusqu'à 128 flotteurs bit.

La solution dans ce cas est de refondre les tableaux à un flotteur de précision inférieure à savoir

array = numpy.float64(array)

Hope this helps: ~)

+1

En fait, c'est la bonne réponse, je pense.Au moins, il a résolu mon problème. –

+0

Cela a résolu pour moi aussi. –