Наконец-то я нашел способ применить классификатор к геопандам, используя библиотеку mapclassify над геоданными в геопанде.Здесь я публикую простой класс, содержащий статический метод, который позволяет оценивать и извлекать объект классификации из серии панд / геопанд.
Классификационный объект содержит некоторые атрибуты, которые могут быть переданы в функцию построения своего геоданных.
Классификация также может быть изменена, поскольку в библиотеке mapclassify есть несколько опций.
Вот фрагмент кода:
import geopandas as gpd
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np
class matplotlib_custom_schemer(object):
@ staticmethod
def get_bins_for_transformed_data(series, transformation='log',
mc_classifier='Fisher_Jenks_Sampled' ,
k=5, **kwd_for_mc_classifier):
if not callable(transformation):
import numpy as np
if hasattr(np, transformation):
transformation = getattr(np, transformation)
else:
print("User must supply a transformation function or a numpy function for it to work")
series = transformation(series)
import mapclassify as mc
classifier = getattr(mc, mc_classifier)
e = classifier(y=series, k=k, **kwd_for_mc_classifier)
return e
# Getting classification bins
e = matplotlib_custom_schemer.get_bins_for_transformed_data(Temp[column].values, k=6)
ei = e.bins.tolist()
# Plotting with classified bins
Projection = ccrs.PlateCarree()
fig, ax = plt.subplots(3,4, figsize=(width, height), sharex=False, sharey=False, subplot_kw={'projection':Projection})
minx, miny, maxx, maxy = GeoDataFrame.total_bounds
GeoDataFrame.plot(ax=ax,
column='my_column_with_numerical_data',
legend=True,
markersize = 0.01,
categorical=False,
scheme='user_defined',
classification_kwds={'bins':ei},
linewidth=0.02,
edgecolor='k',
facecolor='white',
legend_kwds={'loc': (1.05, 0.25),
'bbox_transform':ax.transAxes,
'frameon': True ,
'markerscale':0.4,
'markersize':10,
'handletextpad':0.2,
'handlelength':0.15,
'labelspacing':0.2,
'fontsize':7.5} )
ax.set_extent((minx, maxx, miny, maxy))
fig.show()
Не стесняйтесь обновлять его.
С уважением,
Филипп Р. Лил