web-dev-qa-db-fra.com

Y a-t-il un moyen de dessiner la carte de l'Inde dans tracé?

J'essaie de tracer la carte de l'Inde en utilisant tractement, mais incapable de trouver un moyen de le faire. Vous trouverez ci-dessous le code que j'ai essayé pour les États-Unis.

import pandas as pd

df_sample = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/laucnty16.csv')
df_sample['State FIPS Code'] = df_sample['State FIPS Code'].apply(lambda x: str(x).zfill(2))
df_sample['County FIPS Code'] = df_sample['County FIPS Code'].apply(lambda x: str(x).zfill(3))
df_sample['FIPS'] = df_sample['State FIPS Code'] + df_sample['County FIPS Code']

colorscale = ["#f7fbff","#ebf3fb","#deebf7","#d2e3f3","#c6dbef","#b3d2e9","#9ecae1",
              "#85bcdb","#6baed6","#57a0ce","#4292c6","#3082be","#2171b5","#1361a9",
              "#08519c","#0b4083","#08306b"]
endpts = list(np.linspace(1, 12, len(colorscale) - 1))
fips = df_sample['FIPS'].tolist()
values = df_sample['Unemployment Rate (%)'].tolist()

fig = ff.create_choropleth(
    fips=fips, values=values,
    binning_endpoints=endpts,
    colorscale=colorscale,
    show_state_data=False,
    show_hover=True, centroid_marker={'opacity': 0},
    asp=2.9, title='USA by Unemployment %',
    legend_title='% unemployed'
)

fig.layout.template = None
fig.show()

PRODUCTION: enter image description here

De la même manière que je veux juste dessiner la carte de l'Inde avec des valeurs vitrées. et veulent juste une sortie comme ci-dessous ... la sortie de la carte indienne: -enter image description here

9

Remarque : Je ne pouvais pas réussir à le faire dans tracé, mais je peux le faire facilement dans bokeh . L'Op a demandé spécifiquement pour tracé mais je pose toujours cette réponse pour montrer comment peut-on faire d'une autre manière.

  1. Geojson of India States est distribué par https://gadm.org/
  2. Chargez-le dans GeoJSONDataSource modèle de données de bokeh
  3. Configurer la figure et FAEF dans le modèle de données
  4. Les couleurs personnalisées peuvent être courantes en ajoutant les informations par germination/état à l'intérieur du Datamodel.

Code de travail

from bokeh.models import GeoJSONDataSource
from urllib.request import urlopen
import json

from bokeh.models import GeoJSONDataSource, HoverTool, LinearColorMapper
from bokeh.palettes import Viridis256
from bokeh.plotting import figure
from bokeh.io import output_file, show
import matplotlib.pyplot as plt
from bokeh.io import show, output_notebook

%matplotlib 
output_notebook()

# Geojson of India
with urlopen("https://raw.githubusercontent.com/geohacker/india/master/state/india_state.geojson") as response:
    geojson = json.load(response)

# Round robin over over 3 colors
# You can set the colors here based on the case count you have per state
for i in range(len(geojson['features'])):
  geojson['features'][i]['properties']['Color'] = ['blue', 'red', 'green'][i%3]


# Set the hover to state information and finally plot it
cmap = LinearColorMapper(palette=Viridis256)

TOOLS = "pan,wheel_zoom,box_zoom,reset,hover,save"

geo_source = GeoJSONDataSource(geojson=json.dumps(geojson))

p = figure(title='India', tools=TOOLS, x_axis_location=None, y_axis_location=None, width=800, height=800)
p.grid.grid_line_color = None

p.patches('xs', 'ys', fill_alpha=0.7, line_color='black', fill_color='Color', line_width=0.1, source=geo_source)

hover = p.select_one(HoverTool)
hover.point_policy = 'follow_mouse'
hover.tooltips = [('State:', '@NAME_1')]

show(p)

Production: enter image description here

Comme mentionné dans le code des commentaires ci-dessus, vous pouvez ajouter les informations de cas aux états du DataModel et la définir sur HoverTool. De cette façon, lorsque vous survolez des sates, vous verrez le nombre de cas. En fait, vous pouvez simplement ajouter ce que l'on souhaite envers les États à l'intérieur du Datamodel et utilisez le Datamodel pour les rendre.

2
mujjiga