簡體   English   中英

如何使用時間滑塊 plot 和 map 並使用 plotly 在 Z23EEEB4347BDD756BFC6B7EE9A 中放大城市

[英]How to plot a map with time-slider and zoom on a city with plotly in python

我想創建一個交互式 map,顯示城市不同點上變量(自行車數量)的演變。

為什么不使用 plotly。

我想做這樣的事情: https://amaral.northwestern.edu/blog/step-step-how-plot-map-slider-represent-time-evolu和 slider。

但是,我無法以城市為中心來重現它,我無法選擇比“歐洲”更精確的 scope。

你知道如何用變焦來做到這一點嗎?

  • 您沒有提供任何代碼或示例數據。 因此使用了這個http://api.citybik.es/v2/ https://github.com/eskerda/pybikes項目來獲取一些自行車數據
  • 數據只是最新的,所以在pickle文件中建立數據以進行進化
  • 使用Plotly Expressanimation_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}
)

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM