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()
不幸的是,
my_chart
似乎“丢失”了df
中包含的几何图形(一个geopandas数据框,其中包含POLYGON的列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/
好的,正如评论中提到的,这是 Highcharts Maps for Python v.1.5.0 中的一个错误,现已从 v.1.5.1 解决。通过此错误修复,您的代码确实成功加载地图拓扑并渲染地图。
但是,在测试错误修复时,我确实注意到上面代码中的一件小事:您没有设置系列
.join_by
属性,如 API 参考文档中所述,意味着它默认为 'hc-key'
。
由于您的拓扑/几何图形没有相应的
'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()
这将呈现如下所示的图表(鼠标悬停在一个区域上):
显然,您可以进一步配置鼠标悬停在某个数据点上时显示的工具提示和信息。
希望这有帮助,感谢您提出问题并帮助我们发现这个错误!