问题描述
我正在尝试在欧洲地图上放置一些点。
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
旁注:“sourceMap”的东西是一个红鲱鱼:那是一个 javascript concept,而不是参考地理地图。