Я думаю, что один из способов сделать это - создать (больший) список кортежей, каждая точка которого будет повторяться в соответствии с плотностью в этой точке. Точка с высокой плотностью представлена множеством точек друг над другом, в то время как точка с низкой плотностью имеет мало точек. Поэтому вместо: [(120.7, 82.5, 2), (130.6, 81.5, 1)]
вы бы использовали [(120.7, 82.5), (120.7, 82.5), (130.6, 81.5)]
(довольно скучный набор данных).
Одной из возможных проблем является то, что ваши плотности могут быть числами с плавающей точкой, а не целыми числами, поэтому вам следует нормализовать и округлить данные. Один из способов сделать преобразование - что-то вроде этого:
def dens2points (dens_tups):
min_dens = dens_tups[0][2]
for tup in dens_tups:
if (min_dens > tup[2]):
min_dens = tup[2]
print min_dens
result = []
for tup in dens_tups:
for i in range(int(tup[2]/min_dens)):
result.append((tup[0],tup[1]))
return result
if __name__ == "__main__":
input = [(10, 10, 20.0),(5, 5, 10.0),(10,10,0.9)]
output = dens2points(input)
print input
print output
(который не очень питоничен, но, кажется, работает для простого тестового примера). Эта подпрограмма должна преобразовать ваши данные в форму, которая принята heatmap.py. Приложив немного усилий, я думаю, что подпрограмма может быть сокращена до двух строк.