У меня есть GeoDataFrame
со столбцом «различия», в котором хранится дельта между двумя числами. Иногда эти числа являются положительными, отрицательными или нулевыми, если нет разницы. Мне нужно сделать карту хороплета, которая имеет некоторую расходящуюся карту цветов с 0 (или средним буфером) в качестве средней точки и несимметричной цветовой шкалой, например [-0.02, -0.01, 0., 0.01, 0.02, 0.03
]. Я экспериментировал с
class MidPointNormalize(mp.colors.Normalize):
def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
self.midpoint = midpoint
mp.colors.Normalize.__init__(self, vmin, vmax, clip)
def __call__(self, value, clip=None):
x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
return np.ma.masked_array(np.interp(value, x, y), np.isnan(value))
norm = MidPointNormalize(midpoint=0,vmin=diff_merge_co["diff"].min(),
vmax=diff_merge_co["diff"].max())
diff_merge_co.plot(ax=ax, column="diff", cmap="coolwarm", norm=norm,
legend=True)
, а также установка norm
для некоторых выбранных значений:
bounds = np.array([-0.02, -0.01, 0., 0.01, 0.02, 0.03])
norm = colors.BoundaryNorm(boundaries=bounds, ncolors=256)
но есть много технических проблем с этим (включая то, что цветовая полоса не сохраняется вверх и очевидное уродство ручного выбора ваших значений).
Итак, мой вопрос: как бы вы нарисовали карту с расходящимся масштабом, используя geopandas.GeoDataFrame.plot()
и какой метод mapclassify
вы бы использовали?