Сюжет Express Choropleth для регионов страны - PullRequest
0 голосов
/ 26 марта 2020

У меня есть датафрейм, созданный в CSV-файле об итальянском Covid-19, разбросанном по регионам. Я пытался создать график px.choropleth, в котором показаны значения Total Positive для всех регионов Италии. Этот код пробовал:

italy_regions=[i for i in region['Region'].unique()]
fig = px.choropleth(italy_last, locations="Country",
                    locationmode=italy_regions,
                    color=np.log(italy_last["TotalPositive"]), 
                    hover_name="Region", hover_data=['TotalPositive'],
                    color_continuous_scale="Sunsetdark", 
                    title='Regions with Positive Cases')
fig.update(layout_coloraxis_showscale=False)
fig.show()

Теперь я сообщаю некоторую информацию: «Страна» - это имя, данное моему фрейму данных, и оно заполнено только теми же значениями: «Италия». Если я только введу 'location = "Country"', график будет в порядке, и я смогу видеть Италию, раскрашенную в карту мира. Проблемы начинаются, когда я пытаюсь раскрасить pyplot в моих регионах. Поскольку я новичок в pyplot express, я прочитал несколько примеров и подумал, что мне нужно создать список имен итальянских регионов, а затем поместить их в «choropleth» в качестве входных данных для «barmode». Очевидно, я не прав. Итак, какова процедура, чтобы выполнить его (если есть)? В случае необходимости я могу предоставить оба файла csv, над которыми работает файл jupyter.

1 Ответ

2 голосов
/ 31 марта 2020

Вам необходимо указать гео json с границами итальянского региона в качестве параметра geo json для сюжета. express .choropleth, например этот

https://gist.githubusercontent.com/datajournalism-it/48e29e7c87dca7eb1d29/raw/2636aeef92ba0770a073424853f37690064eb0ea/regioni.geojson

Если вы используете этот, вам нужно явно передать featureidkey='properties.NOME_REG' в качестве параметра plotly. express .choropleth.

Рабочий пример:

import pandas as pd
import requests
import plotly.express as px

regions = ['Piemonte', 'Trentino-Alto Adige', 'Lombardia', 'Puglia', 'Basilicata', 
           'Friuli Venezia Giulia', 'Liguria', "Valle d'Aosta", 'Emilia-Romagna',
           'Molise', 'Lazio', 'Veneto', 'Sardegna', 'Sicilia', 'Abruzzo',
           'Calabria', 'Toscana', 'Umbria', 'Campania', 'Marche']

# Create a dataframe with the region names
df = pd.DataFrame(regions, columns=['NOME_REG'])
# For demonstration, create a column with the length of the region's name
df['name_length'] = df['NOME_REG'].str.len()

# Read the geojson data with Italy's regional borders [enter image description here][2]from github
repo_url = 'https://gist.githubusercontent.com/datajournalism-it/48e29e7c87dca7eb1d29/raw/2636aeef92ba0770a073424853f37690064eb0ea/regioni.geojson'
italy_regions_geo = requests.get(repo_url).json()

# Choropleth representing the length of region names
fig = px.choropleth(data_frame=df, 
                    geojson=italy_regions_geo, 
                    locations='NOME_REG', # name of dataframe column
                    featureidkey='properties.NOME_REG',  # path to field in GeoJSON feature object with which to match the values passed in to locations
                    color='name_length',
                    color_continuous_scale="Magma",
                    scope="europe",
                   )
fig.update_geos(showcountries=False, showcoastlines=False, showland=False, fitbounds="locations")
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()

Выходное изображение

...