Altair/Vega 地图未显示 Chrome 无法加载 SourceMap

问题描述

我正在尝试在欧洲地图上放置一些点。

  import altair as alt
  import pandas as pd

  mydf = pd.DataFrame({
    'name': ['Constanta','Turin','Madrid','copenhagen','Berlin'],'lat': [45.1598,45.0703,40.4168,55.6761,52.5200],'long': [28.6348,7.6869,-3.7038,12.5683,13.40]
    })

    alt.Chart(mydf).mark_circle().encode(
        longitude='long',latitude='lat',size=alt.value(50),tooltip='name'
    ).project(
        type= 'mercator',scale= 350,center= [20,50],clipExtent= [[0,0],[400,300]],).properties(
        width=500,height=400
    )

点出现在正确的位置,但地图没有显示,它只是一个空白图。在 Chrome (Jupyter Notebook) 中,我收到以下错误

DevTools Failed to load SourceMap: Could not load content for https://cdn.jsdelivr.net/npm/vega.min.js.map: HTTP error: status code 404,net::ERR_HTTP_RESPONSE_CODE_FAILURE

我尝试切换浏览器、嵌入 Streamlit、更新我的库。

解决方法

Altair 不会自动显示地图背景;您必须在图层中手动执行此操作,如下所示:

import altair as alt
from vega_datasets import data
import pandas as pd

countries = alt.topo_feature(data.world_110m.url,'countries')

mydf = pd.DataFrame({
    'name': ['Constanta','Turin','Madrid','Copenhagen','Berlin'],'lat': [45.1598,45.0703,40.4168,55.6761,52.5200],'long': [28.6348,7.6869,-3.7038,12.5683,13.40]
})

points = alt.Chart(mydf).mark_circle().encode(
    longitude='long',latitude='lat',size=alt.value(50),tooltip='name'
).project(
    type= 'mercator',scale= 350,center= [20,50],clipExtent= [[0,0],[400,300]],).properties(
    width=500,height=400
)

background = alt.Chart(countries).mark_geoshape(
    fill='#CCCCCC',stroke='white'
).project(
    type= 'mercator',# Magnify
    center= [20,# [lon,lat]
    clipExtent= [[0,# [[left,top],[right,bottom]]
).properties(
    width=400,height=300
)

background + points

enter image description here

旁注:“sourceMap”的东西是一个红鲱鱼:那是一个 javascript concept,而不是参考地理地图。