人物工厂create_choropleth
你正在使用的方法是已弃用 https://plotly.com/python/county-choropleth/并专门与美国各县开展业务。对于其他地图,您需要用于要映射的要素的 GeoJSON。 Plotly 仅附带世界各国和美国各州的 GeoJSON 数据,因此您必须自己提供印度各州的数据。
就像您的示例分区统计图一样,让我们绘制截至目前每个州的活跃 COVID-19 病例数July 17 https://gist.githubusercontent.com/jbrobst/56c13bbbf9d97d187fea01ca62ea5112/raw/e388c4cae20aa53cb5090210a42ebb9b765c0a36/active_cases_2020-07-17_0800.csv(这来自indiacovid19.github.io https://indiacovid19.github.io/webarchive/mohfw/2020-07-17_0800,定期存档印度卫生部的数据)。至于 GeoJSON,快速搜索会产生一些 GitHub 存储库,但对于我们的案例数据来说,大多数存储库似乎都过时了,因为它们不包括 Dadra 和 Nagar Haveli 以及 Daman 和 Diu 的合并。幸运的是,datameet https://github.com/datameet/maps为印度各州提供了最新的 shapefile,我对其进行了一些简化以减小大小并转换为GeoJSON https://gist.githubusercontent.com/jbrobst/56c13bbbf9d97d187fea01ca62ea5112/raw/e388c4cae20aa53cb5090210a42ebb9b765c0a36/india_states.geojson using 地图塑造者 https://mapshaper.org/,然后使用翻转多边形绕组geojson-倒带 https://github.com/mapbox/geojson-rewind.
现在,正如详细的情节性文档 https://plotly.com/python/choropleth-maps/,我们可以使用plotlyexpress用我们的数据快速制作一个等值线图:
import pandas as pd
import plotly.express as px
df = pd.read_csv("https://gist.githubusercontent.com/jbrobst/56c13bbbf9d97d187fea01ca62ea5112/raw/e388c4cae20aa53cb5090210a42ebb9b765c0a36/active_cases_2020-07-17_0800.csv")
fig = px.choropleth(
df,
geojson="https://gist.githubusercontent.com/jbrobst/56c13bbbf9d97d187fea01ca62ea5112/raw/e388c4cae20aa53cb5090210a42ebb9b765c0a36/india_states.geojson",
featureidkey='properties.ST_NM',
locations='state',
color='active cases',
color_continuous_scale='Reds'
)
fig.update_geos(fitbounds="locations", visible=False)
fig.show()
为了对绘图进行更精细的控制,我们可以直接使用图形对象:
import pandas as pd
import plotly.graph_objects as go
df = pd.read_csv("https://gist.githubusercontent.com/jbrobst/56c13bbbf9d97d187fea01ca62ea5112/raw/e388c4cae20aa53cb5090210a42ebb9b765c0a36/active_cases_2020-07-17_0800.csv")
fig = go.Figure(data=go.Choropleth(
geojson="https://gist.githubusercontent.com/jbrobst/56c13bbbf9d97d187fea01ca62ea5112/raw/e388c4cae20aa53cb5090210a42ebb9b765c0a36/india_states.geojson",
featureidkey='properties.ST_NM',
locationmode='geojson-id',
locations=df['state'],
z=df['active cases'],
autocolorscale=False,
colorscale='Reds',
marker_line_color='peachpuff',
colorbar=dict(
title={'text': "Active Cases"},
thickness=15,
len=0.35,
bgcolor='rgba(255,255,255,0.6)',
tick0=0,
dtick=20000,
xanchor='left',
x=0.01,
yanchor='bottom',
y=0.05
)
))
fig.update_geos(
visible=False,
projection=dict(
type='conic conformal',
parallels=[12.472944444, 35.172805555556],
rotation={'lat': 24, 'lon': 80}
),
lonaxis={'range': [68, 98]},
lataxis={'range': [6, 38]}
)
fig.update_layout(
title=dict(
text="Active COVID-19 Cases in India by State as of July 17, 2020",
xanchor='center',
x=0.5,
yref='paper',
yanchor='bottom',
y=1,
pad={'b': 10}
),
margin={'r': 0, 't': 30, 'l': 0, 'b': 0},
height=550,
width=550
)
fig.show()