环境
我们在Windows 11上使用Python 3.11.2。
目标
我们使用下面的Python代码,试图使用Plotly Express生成一副世界地图,并将地图上的一些特定位置用红点标出。
import plotly.express as px
lons = [-150.7585, -153.4716, -148.7531, -159.6267, -155.248336791992]
lats = [61.7591, 59.3152, 63.1633, 54.5612, 18.7551670074463]
fig = px.scatter_geo(lat=lats, lon=lons, title="在世界地图上随意标记出一些点")
fig.show()
预期现象
Plotly Express绘制出一副世界地图。
实际现象
然而,我们却看到了一片空白。
检查问题
通过快捷键Ctrl+Shift+J
在Google Chrome中调出控制台,发现在加载Plotly生成的页面时出现了一些JavaScript错误。这些错误声称在取回一个名为https://cdn.plot.ly/world_110m.json
的URL时发生了域名无法解析的错误。
并且,经过尝试,该域名确实无法被解析,而且也无法被Ping通。
nslookup cdn.plot.ly
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.
*** 无法找到服务器 cdn.plot.ly 的地址: Timed out
啼笑皆非的解决方案
过了一分钟,该域名突然可以被解析。
ping cdn.plot.ly
正在 Ping osff.map.fastly.net [151.101.2.217] 具有 32 字节的数据:
来自 151.101.2.217 的回复: 字节=32 时间=76ms TTL=57
来自 151.101.2.217 的回复: 字节=32 时间=27ms TTL=57
来自 151.101.2.217 的回复: 字节=32 时间=21ms TTL=57
来自 151.101.2.217 的回复: 字节=32 时间=29ms TTL=57
于是此时尝试生成世界地图,成功地完成。
结论
Plotly需要从其CDN上取得内容来帮助绘制世界地图。当网络不可用时,将无法完成。因此,Plotly也无法离线绘制世界地图。