我想知道在geopandas地理数据帧图中是否存在方法或参数,以便在创建地图时可以根据某些功能(即:log)缩放列属性(一旦给定)。
在有关熊猫图的问题中,熊猫图中有logx和logy属性,可以进行这种配置。一旦逻辑设置为“ True”,即使颜色条也遵循缩放因子(对数)。如果可能的话,我希望在Geopandas图上也能有类似的行为。
答案 0 :(得分:0)
您可以使用scheme
关键字。它将允许您设置所需的值分类(分类)。 Geopandas 0.5.0支持mapclassify
提供的所有方案,因此您可以使用其中一种方案,也可以通过mapclassify.User_Defined
定义自己的方案。那也应该调整图例。
gdf.plot(column='colname', scheme='headtail_breaks')
bins = [20, 30] # upper bounds of your bins
gdf.plot(column='colname', scheme='user_defined', bins=bins)
或者,您也可以用日志值创建另一列,然后根据该列对映射进行分类,但是我知道这可能不是理想的方法。
有关分类方法的说明,请参见https://mapclassify.readthedocs.io/en/latest/api.html,例如,有关在Geopandas中实施分类方法的信息,请参见http://geopandas.org/mapping.html?highlight=mapclassify#choosing-colors。
答案 1 :(得分:0)
我终于找到了一种在geopandas geodataframe上使用mapclassify库在geopandas上应用分类器的方法。在这里,我发布了一个简单的类,其中包含一个静态方法,该方法可以评估和检索pandas / geopandas系列中的分类对象。
分类对象包含一些属性,可以将其传递给一个人的大熊猫地理数据框的绘图功能。
由于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()
随时进行更新。
真诚的,
Philipe R. Leal