Jupyter中Highcharts Maps绘制法国省份地图遇问题及转TileMap需求
法国省份分级统计图(Choropleth)问题解决方案
1. 修复Geometry信息丢失问题
用geopandas加载GeoJSON后,得把几何数据和属性数据分开传给Highcharts,不能只传属性列:
- 先把GeoDataFrame转成Highcharts兼容的MapData格式:
map_data = df.geometry.to_json() - 创建图表时,同时指定
data(带省份ID和数值的属性数据)和mapData(几何数据),通过joinBy关联两者的共同ID字段(比如省份编码):my_chart = HighchartsChart( options={ 'series': [{ 'type': 'map', 'data': df[['code', 'value']].to_dict('records'), 'mapData': map_data, 'joinBy': 'code' # 这个字段要和data、mapData里的键匹配 }] } )
2. 解决Highcharts.js加载错误与PNG导出失败
Jupyter里直接用官方CDN加载完整的Highcharts依赖包,避免本地加载路径问题:
- 在Notebook最开头加这段代码:
from IPython.display import display, HTML display(HTML(''' <script src="https://code.highcharts.com/highcharts.js"></script> <script src="https://code.highcharts.com/maps/modules/map.js"></script> <script src="https://code.highcharts.com/maps/modules/exporting.js"></script> <script src="https://code.highcharts.com/maps/modules/offline-exporting.js"></script> ''')) - 必须加载
exporting和offline-exporting模块才能正常导出PNG。如果还是失败,检查Notebook的网络是否能访问CDN资源。
3. 解决Tilemap转换无效问题
直接改series_type='tilemap'没用,因为Tilemap需要网格瓦片格式的数据,和你现在用的省份矢量边界数据不兼容:
- 如果只是想调整地图样式,比如让区块更紧凑,直接改map系列的样式参数就行,比如:
'series': [{ 'type': 'map', # 其他配置... 'borderWidth': 0.5, 'borderColor': '#fff', 'states': {'hover': {'color': '#a4edba'}} }] - 要是确实需要做Tilemap,得重新准备瓦片数据(每个瓦片带x/y坐标和对应数值),再配置:
my_chart = HighchartsChart( options={ 'series': [{ 'type': 'tilemap', 'data': tile_data, # 瓦片格式的数据集 'tileShape': 'hexagon' # 可选正方形(square)或六边形(hexagon) }] } )
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

