Картограмма не отображает затенение границ геойсона - PullRequest
2 голосов
/ 04 апреля 2019

Фолио отображает карту хороплета с границами полицейских сил, но все они серые и не соответствуют цвету для данных в информационном кадре.

Я также обеспечил соблюдение новой версии документации, то есть фолиума.Choropleth.Я также проверил, чтобы убедиться, что я key_on = 'feature.properties.pfa16nm', проверив json в geojson.io. При проверке геоджона особенность пишется с большой буквы, однако, когда я изменяю ее на это, я получаю сообщение об ошибке и никакой картыоказывает.Я также переименовал файл, чтобы в качестве расширения использовался только геойсон, и это не сработало.

import pandas as pd
import folium
import json
import os
adults_trafficked = pd.read_excel('Adults trafficked.xlsx')
force_boundaries = 'Police_Force_Areas_December_2016_Generalised_Clipped_Boundaries_in_England_and_Wales.geojson.json'

m = folium.Map([52.6333, -1.1333], zoom_start=4)
folium.Choropleth(
    geo_data=force_boundaries,
    data=adults_trafficked,
    columns=['Police_Force', 'Adults_Exploited'],
    key_on='feature.properties.pfa16nm',
    threshold_scale=[0, 25, 50, 75, 100, 125, 150, 175],
    fill_color='BuPu',
    legend_name='Trafficked Humans',
).add_to(m)
m

Вывод, который я получаю enter image description here

Я ожидаю, что карта Leaflet будет отображаться с каждой границей полиции, заштрихованной до соответствующего уровня, основанного на столбце dataframeданные.Карта Chorpleth отлично отображает границы, но все они серые и не содержат тонального диапазона, который можно было бы ожидать. Пожалуйста, найдите код, данные и ссылку json здесь.

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Проблема в том, что имя ключа и имя Police_Force в вашей базе данных не совпадают. Поэтому после анализа ваших данных, а также файла JSON я провел некоторую предварительную обработку ваших данных, чтобы имя совпадало с ключом в нашем файле JSON.

Вот полное решение вашего вопроса.

# import libraries
import pandas as pd
import folium
import json
import webbrowser

# read data
adults_trafficked = pd.read_excel('Adults trafficked.xlsx')

# Pre processing of data
adults_trafficked['Police_Force'] = adults_trafficked['Police_Force'].replace('Police|Constabulary','', regex=True, ).replace('&','and', regex=True)
adults_trafficked.loc[adults_trafficked['Police_Force'] == "Metropolitan  Service",'Police_Force' ] = 'Metropolitan Police'

# remove any trailing or leading white spaces
adults_trafficked['Police_Force'] = adults_trafficked['Police_Force'].str.strip()

# border json file 
force_boundaries = 'Police_Force_Areas_December_2016_Generalised_Clipped_Boundaries_in_England_and_Wales.geojson.json'

# choropleth map
m = folium.Map([52.6333, -1.1333], zoom_start=7)

m.choropleth(
    geo_data=force_boundaries,
    data=adults_trafficked,
    columns=['Police_Force', 'Adults_Exploited'],
    key_on='feature.properties.pfa16nm',
    threshold_scale=[0, 40, 80, 120, 160, 200],
    fill_color='BuPu',
    legend_name='Trafficked Humans',
)
m.save('map.html')
webbrowser.open('map.html')

Обратите внимание, что длина threshold_scale не может быть больше 6. Я вижу, что у вас было 8. Также в вашем файле json есть только 44 данных Police_force, а длина вашего набора данных - 47. Таким образом, эти 3 данные, которые не были спички были проигнорированы. Это то, что вы получите

enter image description here

Если у вас возникли проблемы с пониманием какой-либо части кода, прокомментируйте ниже.

1 голос
/ 11 апреля 2019

Проблема в том, что файл excel не соответствует файлу json.Когда вы используете

columns=['Police_Force', 'Adults_Exploited'],
key_on='feature.properties.pfa16nm',

, Police_Force должна соответствовать pfa16nm в вашем файле json.

Этот код даст вам pfa16nms в вашем json.

import json 
policejson = json.load(open('Police_Force_Areas_December_2016_Generalised_Clipped_Boundaries_in_England_and_Wales.geojson.json')) 
for x in policejson['features'] : 
    print (x['properties']['pfa16nm']) 

Затем необходимо исправить файл Excel и убедиться, что столбец Police_Force соответствует именам в вашем файле JSON.

...