Я построил очень простую картографическую карту, используя Python / Plotly, в которой в качестве местоположений используются сокращения состояний.Я пытаюсь добавить аннотации на карту, однако все учебники, которые я могу найти, используют либо позицию x / y, либо позицию lat / long.
В идеале я хотел бы, чтобы аннотация «заполняла» состояние, которое функционирует как событие щелчка (, как предлагается во втором ответе здесь - это альтернатива использованию JS, потому что яеще не узнали этого), однако, похоже, что решением будет большая аннотация по состоянию.
Итак, мой вопрос: есть ли способ связать положение аннотации с местоположением состояния без использования lat / long?Или мне придется создавать широты / долготы для каждого штата?
Вот мой код:
import pandas as pd
import plotly.plotly as py
d = {'state': ["AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY",
"LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND",
"OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY"],
'change': [-0.01, -0.17, -0.03, -0.02, -0.08, -0.03, -0.01, -0.17, -0.07, -0.11, -0.16, 0.20, -0.05, -0.07, -0.08,
-0.02, -0.04, -0.12, -0.03, -0.14, -0.01, -0.05, 0.09, -0.04, -0.13, 0.01, -1.75, -0.13, -0.01, -0.08,
-0.59, -0.05, -0.02, 0.45, 0.02, -0.05, -0.17, 0.11, -0.12, -0.07, 0.75, 0.01, -0.12, -0.22, 0.32,
-0.02, -0.03, 0.00, -0.18, -0.17]}
df = pd.DataFrame(data=d)
scl = [0.0, "rgb(242,240,247)"], [0.2, "rgb(218,218,235)"], [0.4, "rgb(188,189,220)"],
[0.6, "rgb(158,154,200)"], [0.8, "rgb(117,107,177)"], [1.0, "rgb(84,39,143)],
# df['text'] = df['state']
data = [dict(
type='choropleth',
colorscale=scl,
autocolorscale=False,
locations=df['state'],
z=df['change'].astype(float),
locationmode='USA-states',
# text=df['text'],
marker=dict(
line=dict(
color='rgb(255,255,255)',
width=2
)),
colorbar=dict(
title="Change in" + "<br>" + "Crime Rate")
)]
layout = dict(
title='Change in Juvenile Crime Rates, 2016-2017',
geo=dict(
scope='usa',
projection=dict(type='albers usa'),
showlakes=True,
lakecolor='rgb(255,255,255)'),
)
fig = dict(data=data, layout=layout)
py.plot(fig, filename='jj-crimerate-map')