可以向地理熊猫图添加列比例尺吗?

时间:2019-06-05 20:18:21

标签: python matplotlib geopandas

我想知道在geopandas地理数据帧图中是否存在方法或参数,以便在创建地图时可以根据某些功能(即:log)缩放列属性(一旦给定)。

在有关熊猫图的问题中,熊猫图中有logx和logy属性,可以进行这种配置。一旦逻辑设置为“ True”,即使颜色条也遵循缩放因子(对数)。如果可能的话,我希望在Geopandas图上也能有类似的行为。

2 个答案:

答案 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