Текущее решение - Quick Hack
В настоящее время я реализовал следующую функцию, чтобы применить функцию к данным, связанным с координатой (x, y), расположенной в том же гексбине:
def hexagonify(x, y, values, func=None):
hexagonized_list = []
fig = plt.figure()
fig.set_visible(False)
if func is not None:
image = plt.hexbin(x=x, y=y, C=values, reduce_C_function=func)
else:
image = plt.hexbin(x=x, y=y, C=values)
values = image.get_array()
verts = image.get_offsets()
for offc in range(verts.shape[0]):
binx, biny = verts[offc][0], verts[offc][1]
val = values[offc]
if val:
hexagonized_list.append((binx, biny, val))
fig.clear()
plt.close(fig)
return hexagonized_list
Значения (того же размера, что и x или y) передаются через параметр values
. Гексбины вычисляются с помощью функции hexbin
, равной matplotlib
. Значения извлекаются с помощью функции get_array()
возвращаемого значения PolyCollection
. По умолчанию функция np.mean
применяется к накопленным значениям для бина. Эту функциональность можно изменить, предоставив функцию параметру func
. Впоследствии метод get_offsets()
позволяет нам вычислить центр бинов (, обсуждаемый здесь ). Таким образом, мы можем связать (по умолчанию) среднее значение предоставленных значений в гексбине. Однако это решение является взломом, поэтому любые улучшения этого решения приветствуются.