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

Използвах следния код, след като следвах този урок за извършване на 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), които след това мога лесно да покажа на карта на листовка . Също така използвах листовката за пакета.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