Plotly scatter_mapbox在Jupyter Notebook返回空白地图的解决方法
解决Plotly Express scatter_mapbox空白地图问题
在Python 3.9.12版本的Jupyter Notebook中,使用plotly.express.scatter_mapbox生成地图时始终返回空白,但line_geo等其他地理可视化函数可正常运行,需修复scatter_mapbox以满足需求。
可正常运行的代码示例
fig = px.line_geo(lat=[0,15,20,35], lon=[5,10,25,30]) fig.update_geos(fitbounds="locations") fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0}) fig.show()
无法正常运行的代码示例
import pandas as pd import plotly.express as px data = pd.read_csv('kc_house_data.csv') houses = data[['id','lat','long', 'price']].copy() fig = px.scatter_mapbox(houses, lat='lat', lon='long', hover_name='id', hover_data=['price'], zoom=3, height=300 ) fig.show()
已尝试的无效操作:仅传入数据集和经纬度参数生成地图、启用OpenGL。数据集为Kaggle上的kc-house-data。
解决方案
scatter_mapbox依赖Mapbox瓦片服务,必须指定有效的地图样式才能加载图层,默认配置可能因缺少样式或Token导致空白。修改代码如下:
import pandas as pd import plotly.express as px data = pd.read_csv('kc_house_data.csv') houses = data[['id','lat','long', 'price']].copy() fig = px.scatter_mapbox(houses, lat='lat', lon='long', hover_name='id', hover_data=['price'], zoom=10, # 适配数据所在区域的缩放级别 height=300, mapbox_style='open-street-map' # 指定免费公开的地图样式 ) fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0}) fig.update_mapboxes(fitbounds="locations") # 让地图自动适配数据点范围 fig.show()
关键修改说明
- 添加
mapbox_style参数:使用Plotly内置的免费公开样式(如'open-street-map'、'carto-positron'等),无需额外配置Mapbox Token即可加载地图。 - 调整
zoom值:原代码zoom=3缩放级别过低,数据点集中的区域会被缩小到几乎不可见,改为zoom=10适配kc-house-data的地理范围(美国华盛顿州金县)。 - 添加
update_mapboxes(fitbounds="locations"):让地图自动定位到数据点所在区域,避免手动调整缩放的麻烦。
内容的提问来源于stack exchange,提问作者Marcos Nazario
相关产品推荐
相关产品推荐

