如何使用时间滑块绘制地图并使用 plotly in python 缩放城市
How to plot a map with time-slider and zoom on a city with plotly in python
我想创建一个交互式地图,显示城市不同地点的变量(自行车数量)的演变。
为什么不使用 plotly。
我想做这样的事情:https://amaral.northwestern.edu/blog/step-step-how-plot-map-slider-represent-time-evolu 使用滑块。
但是,我并没有做到以城市为中心来重现它,我不能选择比“欧洲”更精确的范围。
你知道怎么用变焦来做吗?
- 您尚未提供任何代码或示例数据。因此使用这个 http://api.citybik.es/v2/ https://github.com/eskerda/pybikes 项目来获取一些自行车数据
- 数据是最新的,所以在 pickle 文件中建立数据以进行进化
- 使用 Plotly Express 和
animation_frame
参数的简单案例
数据来源
import requests
import pandas as pd
from pathlib import Path
import plotly.express as px
# avalaible data sources...
pd.json_normalize(
requests.get("http://api.citybik.es/v2/networks").json()["networks"]
).loc[lambda d: d["location.city"].eq("London")]
自行车架采购和规划
df = pd.json_normalize(
requests.get("http://api.citybik.es/v2/networks/santander-cycles").json()[
"network"
]["stations"]
)
# build up some data over time
df["timestamp"] = pd.to_datetime(df["timestamp"]).round("15min")
f = Path.cwd().joinpath("bikes.pickle")
if not f.exists():
df.to_pickle(f)
else:
df = pd.concat([pd.read_pickle(f), df])
df = df.groupby(["timestamp","id"], as_index=False).first()
df.to_pickle(f)
# now just plot it on a map with evolution by time
df["ts_str"] = df["timestamp"].dt.strftime("%d-%b %H:%M")
px.scatter_mapbox(
df,
lat="latitude",
lon="longitude",
size="free_bikes",
hover_data=["name"],
animation_frame="ts_str",
).update_layout(
mapbox={"style": "carto-positron", "zoom":11}, margin={"l": 0, "r": 0, "t": 0, "b": 0}
)
我想创建一个交互式地图,显示城市不同地点的变量(自行车数量)的演变。
为什么不使用 plotly。
我想做这样的事情:https://amaral.northwestern.edu/blog/step-step-how-plot-map-slider-represent-time-evolu 使用滑块。
但是,我并没有做到以城市为中心来重现它,我不能选择比“欧洲”更精确的范围。
你知道怎么用变焦来做吗?
- 您尚未提供任何代码或示例数据。因此使用这个 http://api.citybik.es/v2/ https://github.com/eskerda/pybikes 项目来获取一些自行车数据
- 数据是最新的,所以在 pickle 文件中建立数据以进行进化
- 使用 Plotly Express 和
animation_frame
参数的简单案例
数据来源
import requests
import pandas as pd
from pathlib import Path
import plotly.express as px
# avalaible data sources...
pd.json_normalize(
requests.get("http://api.citybik.es/v2/networks").json()["networks"]
).loc[lambda d: d["location.city"].eq("London")]
自行车架采购和规划
df = pd.json_normalize(
requests.get("http://api.citybik.es/v2/networks/santander-cycles").json()[
"network"
]["stations"]
)
# build up some data over time
df["timestamp"] = pd.to_datetime(df["timestamp"]).round("15min")
f = Path.cwd().joinpath("bikes.pickle")
if not f.exists():
df.to_pickle(f)
else:
df = pd.concat([pd.read_pickle(f), df])
df = df.groupby(["timestamp","id"], as_index=False).first()
df.to_pickle(f)
# now just plot it on a map with evolution by time
df["ts_str"] = df["timestamp"].dt.strftime("%d-%b %H:%M")
px.scatter_mapbox(
df,
lat="latitude",
lon="longitude",
size="free_bikes",
hover_data=["name"],
animation_frame="ts_str",
).update_layout(
mapbox={"style": "carto-positron", "zoom":11}, margin={"l": 0, "r": 0, "t": 0, "b": 0}
)