[英]Plotly Bubble Map from list of cities
我有一个国家/地区的城市名称列表,我想使用 plotly 构建列出城市的气泡 map ,其中每个气泡的大小与列出给定城市的次数有关。
到目前为止,我能够使用 plotly express 生成空的 map,但在显示实际数据方面,我不确定如何进行。
我知道 plotly 网站上的许多示例都使用数据框,这让我觉得我需要从这个列表中生成一个。 特别是,上面链接页面上的第三个示例使用纬度/经度来定位气泡。 有没有办法直接从城市名称中绘制气泡图? 否则,我该如何处理?
感谢您的帮助,因为我对 plotly 不是很熟悉。
delist
dflist.groupby("city", as_index=False).size()
merge(dfuk, on="city")
import sys, requests, urllib
import pandas as pd
from pathlib import Path
from zipfile import ZipFile
import plotly.express as px
# fmt: off
# download data set, world cities including GPS co-ordinates
url = "https://simplemaps.com/static/data/world-cities/basic/simplemaps_worldcities_basicv1.74.zip"
f = Path.cwd().joinpath(f'{urllib.parse.urlparse(url).path.split("/")[-1]}.zip')
if not f.exists():
r = requests.get(url, stream=True, headers={"User-Agent": "XY"})
with open(f, "wb") as fd:
for chunk in r.iter_content(chunk_size=128):
fd.write(chunk)
zfile = ZipFile(f)
dfs = {f.filename: pd.read_csv(zfile.open(f)) for f in zfile.infolist() if f.filename.split(".")[1]=="csv"}
# fmt: on
# just UK cities.. with GPS
dfuk = dfs["worldcities.csv"].loc[lambda d: d["iso3"].eq("GBR")]
# dataframe referred to in question, cities listed multiple times
n_cities = 20
p = np.geomspace(0.01, 1, n_cities)
p = p / p.sum()
dflist = pd.DataFrame({"city": np.random.choice(dfuk.sample(n_cities)["city"], 500, p=p)})
px.scatter_mapbox(
dflist.groupby("city", as_index=False).size().merge(dfuk, on="city"),
lat="lat",
lon="lng",
hover_name="city",
size="size",
).update_layout(mapbox={"style": "carto-positron", "zoom": 4}, margin={"t":0,"b":0,"l":0,"r":0})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.