Reputation: 19
Hi I'm currently working with a dataset of new Covid-19 cases per 100k people for every county in the US.
Dataset:
County FIPS | Week 1 | Week 2 | Week 3 | Week 4 | ... |
---|---|---|---|---|---|
01001 | 11.7390 | 11.7390 | 13.5299 | 11.7390 | |
01003 | 4.5835 | 9.5110 | 17.5743 | 20.2621 | |
01005 | 0.0000 | 9.1016 | 33.4078 | 33.4078 | |
... |
I was able to have a Choropleth map that captures any single week. In this case, week 4.
from urllib.request import urlopen
import json
with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
counties = json.load(response)
import plotly.express as px
fig = px.choropleth(df,
geojson=counties,
locations='County FIPS',
color='Week 4',
color_continuous_scale="Viridis",
range_color=(0, 1000),
scope="usa",
labels={'cases': 'weekly cases'}
)
fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0})
fig.show()
How do I create a slider that can display snapshots of each week. I assume that I need to map the slider to the value of the color attribute, but not sure how to go about this.
Thanks.
Upvotes: 1
Views: 2189
Reputation: 35115
The data format needs to be converted to a vertical format instead of a horizontal format. The next step is to add an animation frame in the map settings. Specify the name of the week that will become the slider. Since the data is partial, I narrowed down the range to see if it was working correctly.
from urllib.request import urlopen
import json
import pandas as pd
import numpy as np
import io
data = '''
"County FIPS" "Week 1" "Week 2" "Week 3" "Week 4"
01001 10.7394 10.7394 12.5293 10.7394
01003 3.5837 8.5112 16.5745 19.2623
01005 0.0000 8.1018 32.4070 32.4070
'''
df = pd.read_csv(io.StringIO(data), delim_whitespace=True, dtype={'County FIPS':'object'})
df = df.melt(id_vars='County FIPS', value_vars=df.columns, var_name='weeks')
with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
counties = json.load(response)
import plotly.express as px
fig = px.choropleth(df,
geojson=counties,
locations='County FIPS',
color='value',
color_continuous_scale="Viridis",
animation_frame='weeks',
range_color=(0, 50),
scope="usa",
labels={'cases': 'weekly cases'}
)
fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0})
fig.show()
Upvotes: 1