Matplotlib choropleth map, отображающий две разные части данных - PullRequest
0 голосов
/ 19 ноября 2018

Пока что я создал карту Choropleth:

fig, ax = plt.subplots(1, figsize=(32, 16))
ax.axis('off')

df.plot(column='Income Rank', scheme='quantiles', k=7,legend=True, cmap='YlOrRd_r', ax=ax)
ax.annotate(xy=(0.1, .08),  xycoords='figure fraction', horizontalalignment='left', verticalalignment='top'
            ,s='Income deprivation Rank. Lowest rank = most deprived.')

, который выглядит так: enter image description here

Мой DF выглядит так:

geometry    Counts  WardCode Ward Name   Income Rank                                                                
POLYGON (())    1545    N09000001   Abbey   3

Таким образом, он показывает ранг каждой области по отношению к данным о доходах, которые у меня есть в df. Могу ли я также составить карту преступлений на этой карте? Я пытаюсь показать связь между низким доходом и высоким уровнем преступности. Например, с помощью маркеров или, возможно, использовать другую цветовую схему для представления областей с высоким уровнем преступности? Фрейм данных с моими преступлениями выглядит так:

WARDNAME    Counts
0   CENTRAL 3206
1   DUNCAIRN    757
2   BLACKSTAFF  584

У меня также есть список преступлений с широтой и долготой, который выглядит следующим образом:

Crime ID    Date    Longit  Latit   Crime type  Ward Name   Ward Code
0   01  2016-01 -5.886699   54.591309  Theft    CENTRAL N08000313

Является ли единственным способом, которым я могу нанести обе эти вещи на одну и ту же карту, используя Фолиум и нанеся на Притворную грамоту значения дохода, а затем отобразив преступления в качестве маркеров? Или я могу сделать это без фолиума? Спасибо

1 Ответ

0 голосов
/ 26 ноября 2018

Для картограмм с 2 слоями наложения многоугольников вам нужно использовать (полу или) прозрачные графики на верхнем слое.Позвольте мне продемонстрировать на этом примере.Вам нужно установить геопанды для запуска этого.

import geopandas as gpd
import matplotlib.pyplot as plt

# load world data (provided with geopandas)
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

# select some countries (for top layer plots)
brazil = world[world.name == u'Brazil']
russia = world[world.name == u'Russia']

# grouping countries by continents for base layer
world = world[['continent', 'geometry']]  # for grouping purposes, take 2 columns
continents = world.dissolve(by='continent')  # only column 'geometry' is retained; no aggregated attribute

# plot world's continents first as base layer
ax1 = continents.plot(figsize=(12, 8), cmap='Set2')

# plot other polygons on top of the base layer
# 'facecolor' = 'None' specifies transparent area
# plot Brazil at upper level (zorder=11) using 'hatch' as symbol
# higher value of zorder causes the plot on top of layers with lower values
kwarg3s = {'facecolor': 'None', 'edgecolor': 'green', 'linewidth': 1.5, 'hatch': '|||'}
brazil.plot(zorder=11, ax=ax1, **kwarg3s)

# plot Russia at upper level using 'hatch' as symbol
kwarg4s = {'facecolor': 'None', 'edgecolor': 'red', 'linewidth': 0.5, 'hatch': 'xx'}
russia.plot(zorder=11, ax=ax1, **kwarg4s)
plt.show()

Полученный сюжет: enter image description here

...