Използвах следния код, след като следвах този урок за извършване на 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, за да създам топлинните карти на карта. Някакви предположения?
X
иY
съдържат координатите, свързани с всяка стойност вZ
. - person ali_m   schedule 17.04.2017kernel = stats.gaussian_kde(values)
Z = np.reshape(kernel(positions).T, X.shape)
, които след това мога лесно да покажа на карта на листовка . Също така използвах листовката за пакета.heat, за да получа топлинна карта, но не съм сигурен дали това са същите неща като kde. - person dreamin   schedule 18.04.2017kernel = 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