Python: ошибка при рисовании контурного графика - PullRequest
0 голосов
/ 26 сентября 2011

, несмотря на использование функции поиска, я не смог найти ответ.У меня есть два предположения, но я не знаю, насколько они могут применяться.Теперь проблема:

Я бы хотел построить контур.Для этого у меня есть следующий код Python:

import numpy as np
import matplotlib.pyplot as plt

xi=list_of_distance
yi=list_of_angle

x = np.arange(0,54,0.2)
y = np.arange(0,180,2.0)

Z = np.histogram2d(xi,yi,bins=(274,90))
X, Y = np.meshgrid(x, y)

plt.contour(X,Y,Z)
plt.ylabel('angles')
plt.xlabel('distance')
plt.colorbar()
plt.show()

xi и yi - списки, содержащие значения с плавающей точкой.x и y определяют «интервалы» ... например: x генерирует список со значениями от 0 до 54 с шагом 0,2, y генерирует список со значениями от 0 до 180 с шагом 2,0

с ZI makeиспользование функции NumPy для создания 2D-гистограмм.На самом деле это, кажется, место, которое вызывает проблемы.

Когда вызывается функция plt.contour (X, Y, Z), появляется следующее сообщение об ошибке:

..Файл "/usr/lib/pymodules/python2.7/numpy/ma/core.py", строка 2641, в new _data = np.array (data, dtype = dtype, copy = copy,subok = True, ndmin = ndmin) ValueError: установка элемента массива с последовательностью.

Теперь предположим, что может вызвать эту проблему:

  1. Кажется, что это такожидает массив, но вместо numpy-массива он получает список

или

У нас есть строка, которая короче других (я пришел к этой мысли, после того, как коллега столкнулся с такой проблемой год назад - там это было исправлено, выяснив, что последний ряд был на 2 элемента короче, чемвсе остальные ...)

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

Как и @rocksportrocker, вы должны принять во внимание, что histogram2d возвращает ребра в дополнение к гистограмме. Другая деталь заключается в том, что вы, вероятно, захотите явно указать диапазон, в противном случае для вас будет выбран один из них на основе фактических минимальных и максимальных значений в ваших данных. Затем вы хотите преобразовать края в центры ячеек для графика. Как то так:


import numpy as np
import matplotlib.pyplot as plt

n = 1000000                     # how many data points
xmin, xmax = 0.0, 54.0          # distances
ymin, ymax = 0.0, 180.0         # angles

# make up some random data
xi=np.random.normal(xmax/2.0, xmax/4.0, n)
yi=np.random.normal(ymax/3.0, ymax/3.0, n)

Z, xedges, yedges = np.histogram2d(xi,yi, bins=(270,90), range=[[xmin, xmax], [ymin, ymax]])

# find the cell centers from the cell edges
x = 0.5*(xedges[:-1] + xedges[1:])
y = 0.5*(yedges[:-1] + yedges[1:])

# promote to 2D arrays
Y, X = np.meshgrid(y, x)

plt.contour(X,Y,Z)
plt.ylabel('angles')
plt.xlabel('distance')
plt.colorbar()
plt.savefig("hist2d.png")

дает графическую диаграмму, подобную этой:

hist2d.png

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

0 голосов
/ 26 сентября 2011

Ваша трассировка указывает, что ошибка не возникает из-за вызова matplotlib, это numpy, который вызывает ошибку ValueError.

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