我有以下代码来在 python 中绘制分区统计图。
data = [dict(
type="choropleth",
autocolorscale= True,
locations = df[statename],
z = df[z].astype(float),
locationmode = 'USA-states',
text = df[state],
marker = dict(
line = dict (
color = 'rgb(255,255,255)',
width = 2
)),
colorbar = dict(title = title)
)]
layout = dict(title = title,
geo=dict(scope="usa",showlakes = True,lakecolor = 'rgb(255, 255, 255)'))
iplot(go.Figure(data=data,layout=layout),validate=False)
是否可以仅使用州名称作为
locations
的输入来绘制地图,或者是否需要两个字母州代码。当我使用州代码时它可以工作,但是当我使用州名称时它只会给我一张空地图。
可能有一种方法可以更改传递给参数
locationmode
的值,以采用状态名称而不是状态代码。作为替代方案,如果有一个数据框 statesdf 的列 statesdf['state']
包含州名称,您可以使用以下代码从州名称创建州代码:
state_codes = {
'District of Columbia' : 'dc','Mississippi': 'MS', 'Oklahoma': 'OK',
'Delaware': 'DE', 'Minnesota': 'MN', 'Illinois': 'IL', 'Arkansas': 'AR',
'New Mexico': 'NM', 'Indiana': 'IN', 'Maryland': 'MD', 'Louisiana': 'LA',
'Idaho': 'ID', 'Wyoming': 'WY', 'Tennessee': 'TN', 'Arizona': 'AZ',
'Iowa': 'IA', 'Michigan': 'MI', 'Kansas': 'KS', 'Utah': 'UT',
'Virginia': 'VA', 'Oregon': 'OR', 'Connecticut': 'CT', 'Montana': 'MT',
'California': 'CA', 'Massachusetts': 'MA', 'West Virginia': 'WV',
'South Carolina': 'SC', 'New Hampshire': 'NH', 'Wisconsin': 'WI',
'Vermont': 'VT', 'Georgia': 'GA', 'North Dakota': 'ND',
'Pennsylvania': 'PA', 'Florida': 'FL', 'Alaska': 'AK', 'Kentucky': 'KY',
'Hawaii': 'HI', 'Nebraska': 'NE', 'Missouri': 'MO', 'Ohio': 'OH',
'Alabama': 'AL', 'Rhode Island': 'RI', 'South Dakota': 'SD',
'Colorado': 'CO', 'New Jersey': 'NJ', 'Washington': 'WA',
'North Carolina': 'NC', 'New York': 'NY', 'Texas': 'TX',
'Nevada': 'NV', 'Maine': 'ME'}
statesdf['state_code'] = statesdf['state'].apply(lambda x : state_codes[x])
使用 us 库,它提供了一种将州名称映射到各自州代码的简单方法。
示例:
def map_state_to_code(state_name):
state = us.states.lookup(state_name)
return state.abbr if state else None
statesdf['state_code'] = statesdf['state'].apply(map_state_to_code)