Можно ли добавить масштаб колонки к сюжету геопанды? - PullRequest
0 голосов
/ 05 июня 2019

Мне было интересно, существует ли метод или параметр на графике геоданных в геопанде, чтобы его атрибут столбца (один раз заданный) можно было масштабировать в соответствии с некоторой функцией (например, log) при создании карты.

Впроблемы, связанные с графиком панд, в графике панд есть атрибуты logx и logy, которые допускают такую ​​конфигурацию.Если для logy установлено значение True, даже цветовая шкала следует коэффициенту масштабирования (log).Если возможно, я хотел бы, чтобы подобное поведение было с сюжетом геопанды.

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Наконец-то я нашел способ применить классификатор к геопандам, используя библиотеку 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()

Не стесняйтесь обновлять его.

С уважением,

Филипп Р. Лил

0 голосов
/ 06 июня 2019

Вы можете использовать ключевое слово 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.

.
...