Оценка плотности ядра по координатам

Я использовал следующий код после выполнения этого руководства для выполнения kde с координатами (широта и долгота), которые представляют положение деревьев из переписи уличных деревьев Нью-Йорка 2015 года.

import numpy as np
from scipy import stats

xmin, xmax = min(zip_latitudes), max(zip_latitudes)
ymin, ymax = min(zip_longitudes), max(zip_longitudes)

X, Y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([X.ravel(), Y.ravel()])
values = np.vstack([zip_latitudes, zip_longitudes])
kernel = stats.gaussian_kde(values)
Z = np.reshape(kernel(positions).T, X.shape)

Затем я рисую результаты, которые напоминают тепловую карту, используя matplotlib, выполнив следующие действия:

fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(np.rot90(Z), cmap=plt.cm.gist_earth_r,extent=[xmin, xmax, ymin, ymax])
ax.plot(zip_latitudes, zip_longitudes, 'k.', markersize=2)
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])
plt.show()

Однако мне нужны координаты, чтобы добавить их на график leaflet.js и mapbox.js. Я попытался напечатать некоторые элементы в Z, но я не уверен, что это правильно. Мой план состоял в том, чтобы использовать python для получения координат, затем записать результаты в csv, использовать d3 и lealet.js для создания тепловых карт на карте. Какие-либо предложения?


person dreamin    schedule 15.04.2017    source источник
comment
Что вы подразумеваете под мне нужны координаты? Они у вас уже есть — массивы X и Y содержат координаты, связанные с каждым значением в Z.   -  person ali_m    schedule 17.04.2017
comment
Я пытаюсь создать изоплет на карте листовки. Я не думаю, что могу просто построить координаты X, Y, потому что это не то же самое, что выполнять kde. Поэтому мне было интересно, могу ли я вместо создания графика matplotlib (который показывает изоплет) сделать это в листовке или получить позиции после kde, которые находятся в строках kernel = stats.gaussian_kde(values) Z = np.reshape(kernel(positions).T, X.shape), которые я мог бы затем легко отобразить на карте листовки . Кроме того, я использовал пакет leaflet.heat для получения тепловой карты, но я не уверен, что это то же самое, что и kde.   -  person dreamin    schedule 18.04.2017
comment
Я все еще не уверен, что вы имеете в виду под получить позиции после kde, которые находятся в строках kernel = stats.gaussian_kde(values) Z = np.reshape(kernel(positions).T, X.shape). Z это не набор строк, это прямоугольная матрица, где значение в Z[i, j] соответствует KDE в координате X[i, j], Y[i, j]. Если вам нужны контурные линии, вы можете сначала создать контурный график с помощью matplotlib, а затем извлечь из него координаты линий (например, stackoverflow.com /a/18309914/1461210). Я никогда раньше не использовал leaflet.js, поэтому не знаю, способен ли он делать это изначально.   -  person ali_m    schedule 18.04.2017