ошибка при построении массива log'd в matplotlib / scipy / numpy - PullRequest
1 голос
/ 22 апреля 2010

У меня есть два массива, и я беру их журналы. Когда я делаю это и пытаюсь построить их точечный график, я получаю эту ошибку:

  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.

код просто:

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

Есть идеи, что может быть причиной этого? спасибо.

Ответы [ 3 ]

7 голосов
/ 25 сентября 2010

У меня была та же проблема, которую я недавно исправил:

Проблема для меня заключалась в том, что мои массивы X и Y (numpy) состояли из 128-битных чисел с плавающей точкой.

Решение в этом случае состояло в том, чтобы преобразовать массивы в поплавок с более низкой точностью, т.е.

array = numpy.float64(array)

Надеюсь, это поможет: ~)

5 голосов
/ 22 апреля 2010

Новый ответ:

При просмотре источника эта ошибка выдается, если массив точек, переданный в affine_transform, имеет неправильные измерения или если он пуст. Вот соответствующие строки:

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.");

Взгляните на размеры ваших массивов myarray_x и myarray_y, прежде чем идти дальше.

Старый ответ :

Лучше всего предположить, что вы берете журнал значений <= 0. Это даст вам значения nan или -infs (в случае, если они равны 0) в ваших массивах, которые, конечно, не могут отображаться. </p>

(правда, правда - эти пункты просто игнорируются)

4 голосов
/ 22 апреля 2010

Это успешно выполняется для меня

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

так что, возможно, проблема в том, что вы нам не показали. Можете ли вы предоставить полный фрагмент кода в точности так, как вы его запустили, чтобы мы могли воспроизвести вашу проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...