提问人:Nicolas 提问时间:11/8/2023 最后编辑:Nicolas 更新时间:11/13/2023 访问量:71
python/Jupyter 中的 Highcharts 地图:无渲染
Highcharts map in python/Jupyter : no rendering
问:
刚接触 highcharts 时,我正在尝试使用 Jupyter 笔记本为法国的部门绘制分区统计图(作为开始)
from highcharts_maps.chart import Chart
import geopandas as gpd
import numpy as np
df = gpd.read_file('https://raw.githubusercontent.com/gregoiredavid/france-geojson/master/departements-version-simplifiee.geojson')
df['value'] = np.random.randint(0,100,df.shape[0])
my_chart = Chart.from_geopandas(df, property_map = {
'id': 'code',
'name':'nom',
'value': 'value'
}, series_type = 'map')
my_chart.display()
不幸的是,似乎“丢失”了包含在(具有包含 POLYGON 列的 geopandas 数据帧)中包含的几何图形,因为仅包含系列而没有有关几何图形的任何信息。my_chart
df
geometry
my_chart.options
你知道如何让它工作吗(作为一个基本教程,我将寻找更复杂的地图,例如相同数据的瓦片地图)
更新: 我还尝试在上一个代码之后添加以下代码:
my_map_data = MapData.from_geojson('https://raw.githubusercontent.com/gregoiredavid/france-geojson/master/departements-version-simplifiee.geojson')
my_chart.set_map_data(my_map_data)
它使某些几何图形更加冗长(但会引发错误)my_chart.options
my_chart.options.map_data
HighchartsMapsOptions(chart = {'map': {'topology': {'type': 'Topology', 'objects': {'data': {'geometries': [{'properties': {'code': '01', 'nom': 'Ain'}, 'type': 'Polygon', 'arcs': [[-343, -174, 0, -361, -359, -171, -332]], 'id': 'feature_00'}, {'properties': {'code': '02', 'nom': 'Aisne'}, 'type': 'Polygon', 'arcs': [[-293, 1, -26, -222, -367, -297, -379], [295], [293], [294]], 'id': 'feature_01'}, {'properties': {'code': '03', 'nom': 'Allier'}, 'type': 'Polygon', 'arcs': [[-290, -346, -185, -308, -86, -49]], 'I
请注意,这会引发错误my_chart.display()
Something went wrong with the Highcharts.js script. It should have been automatically loaded, but it did not load for over 5 seconds. Check your internet connection, and then if the problem persists please reach out for support. (You can also check your browser's console log for more details.)
Detailed Error Message:
undefined is not a function (near '...Highcharts.mapChart...')
所以导出功能到PNG文件:HTTPError: 520 Server Error: for url: https://export.highcharts.com/
上次编辑 :启用此选项可显示带有颜色的图表。但是尝试将其转换为瓦片图未成功
我添加了这些代码行以正确呈现颜色
color_axis_options = {
'min': 0,
'max': 100,
'minColor': '#e6e9ff',
'maxColor': '#0022ff'
}
my_chart.options.color_axis = color_axis_options
现在,我想将这张地图转换为瓦片地图。我以为我必须改变,但没有成功。你有什么想法吗?series_type='tilemap'
谢谢
答:
好的,正如评论中提到的,这原来是 Highcharts Maps for Python v.1.5.0 中的一个错误,现在已经从 v.1.5.1 开始解决。通过此 bug 修复,您的代码将成功加载地图拓扑并呈现地图。
但是,在测试错误修复时,我确实注意到上面代码中的一件小事:您没有设置 series 属性,如 API 参考文档中所述,这意味着它默认为 ..join_by
'hc-key'
由于拓扑/几何没有相应的字段,因此要渲染的数据点最终不会连接到地图几何,因此无法正确渲染。在您提供的代码中,通过设置 to 的值 (using ,这很容易解决,这会导致数据点按顺序连接。当然,您也可以指定地图数据中存在的字段。'hc-key'
.join_by
null
highcharts_maps.constants.EnforcedNull
.join_by
以下是包含该小调整的代码:
from highcharts_maps.chart import Chart
from highcharts_maps import constants
import geopandas as gpd
import numpy as np
df = gpd.read_file('https://raw.githubusercontent.com/gregoiredavid/france-geojson/master/departements-version-simplifiee.geojson')
df['value'] = np.random.randint(0,100,df.shape[0])
my_chart = Chart.from_geopandas(df, property_map = {
'id': 'code',
'name':'nom',
'value': 'value'
}, series_type = 'map')
my_chart.options.series[0].join_by = constants.EnforcedNull
my_chart.display()
这将呈现如下图表(鼠标悬停在一个区域上):
显然,您可以进一步配置鼠标悬停在其中一个数据点上时显示的工具提示和信息。
希望这会有所帮助,并感谢您提出问题并帮助我们发现此错误!
评论
my_chart.options.map_data
my_chart.options.chart.map_data