Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
python-visualization
GitHub Repository: python-visualization/folium
Path: blob/main/tests/snapshots/modules/issue_1989.py
1602 views
1
import io
2
3
import branca
4
import geopandas
5
import pandas as pd
6
import requests
7
8
import folium
9
10
response = requests.get(
11
"https://gist.githubusercontent.com/tvpmb/4734703/raw/"
12
"b54d03154c339ed3047c66fefcece4727dfc931a/US%2520State%2520List"
13
)
14
abbrs = pd.read_json(io.StringIO(response.text))
15
16
income = pd.read_csv(
17
"https://raw.githubusercontent.com/pri-data/50-states/master/data/income-counties-states-national.csv",
18
dtype={"fips": str},
19
)
20
income["income-2015"] = pd.to_numeric(income["income-2015"], errors="coerce")
21
22
data = requests.get(
23
"https://raw.githubusercontent.com/python-visualization/folium-example-data/main/us_states.json"
24
).json()
25
26
states = geopandas.GeoDataFrame.from_features(data, crs="EPSG:4326")
27
statesmerge = states.merge(abbrs, how="left", left_on="name", right_on="name")
28
statesmerge["geometry"] = statesmerge.geometry.simplify(0.05)
29
30
statesmerge["medianincome"] = statesmerge.merge(
31
income.groupby("state")["income-2015"].median(),
32
how="left",
33
left_on="alpha-2",
34
right_on="state",
35
)["income-2015"]
36
statesmerge["change"] = statesmerge.merge(
37
income.groupby("state")["change"].median(),
38
how="left",
39
left_on="alpha-2",
40
right_on="state",
41
)["change"]
42
43
statesmerge["empty"] = None
44
45
colormap = branca.colormap.LinearColormap(
46
vmin=statesmerge["change"].quantile(0.0),
47
vmax=statesmerge["change"].quantile(1),
48
colors=["red", "orange", "lightblue", "green", "darkgreen"],
49
caption="State Level Median County Household Income (%)",
50
)
51
52
m = folium.Map(tiles=None, location=[35.3, -97.6], zoom_start=4)
53
54
popup = folium.GeoJsonPopup(
55
fields=["name", "change"],
56
aliases=["State", "% Change"],
57
localize=True,
58
labels=True,
59
style="background-color: yellow;",
60
)
61
62
tooltip = folium.GeoJsonTooltip(
63
fields=["name", "medianincome", "change", "empty"],
64
aliases=["State:", "2015 Median Income(USD):", "Median % Change:", "empty"],
65
localize=True,
66
sticky=False,
67
labels=True,
68
style="""
69
background-color: #F0EFEF;
70
border: 2px solid black;
71
border-radius: 3px;
72
box-shadow: 3px;
73
""",
74
max_width=800,
75
)
76
77
g = folium.GeoJson(
78
statesmerge,
79
style_function=lambda x: {
80
"fillColor": (
81
colormap(x["properties"]["change"])
82
if x["properties"]["change"] is not None
83
else "transparent"
84
),
85
"color": "black",
86
"fillOpacity": 0.4,
87
},
88
tooltip=tooltip,
89
popup=popup,
90
).add_to(m)
91
92
colormap.add_to(m)
93
94