我对
choropleth_mapbox()
很陌生,我不知道问题出在我的脚本中。我想显示各个投标区的平均现货市场能源价格。最终,我希望在这样的地图旁边有一个带有按钮的字段,这样我就可以选择适当的年、月或日,并且当我将鼠标悬停在地图上时,地图将改变其颜色并显示数据。可以找到类似的东西,例如这里:https://www.energy-charts.info/charts/price_average_map/chart.htm?l=en&c=EU。要显示此类数据,您首先需要 .shp 或 .geojson 文件,我从 https://github.com/EnergieID/entsoe-py/tree/master/entsoe/geo/geojson 下载这些文件。我将它们全部导入到 GIS 程序 (QGIS) 中,并将它们合并到带有属性表的一个文件中。
但是,我在显示这些数据时遇到了麻烦,因此我决定作为测试,我将采用一种非常简单的方法来使用随机生成的数字来显示这些数据。然而,事实证明,所有内容都没有正确显示,并且地图上生成了一些随机形状,没有反映出价区域。
已采取的步骤
px.choropleth_mapbox
创建地图。Python代码:
import pandas as pd
from pathlib import Path
import json
import geopandas as gpd
import plotly.express as px
import numpy as np
#Path to file
curr_dir = Path.cwd()
project_root = Path(curr_dir.parent)
shapefile_file = project_root / 'Dane' / 'BIDDING ZONES2.shp'
#Loading shapefile
bidding_zones= gpd.read_file(shapefile_file)
# generation of random numbers from 0 to 100 in the same amount as number of bidding zones
num_zones = len(bidding_zones_test)
random_numbers = np.random.rand(num_zones) * 100
#Creation of DataFrame, which would be necessary in choropleth_mapbox()
#Mapping of zoneName (key) of each bidding zone with random values to display later on
df = pd.DataFrame({
'zoneName': bidding_zones_test['zoneName'],
'random_value': random_numbers
# Convert GeoDataFrame to GeoJSON
countries = json.loads(bidding_zones.to_json())
})
# Create an interactive map
fig = px.choropleth_mapbox(df,
geojson=countries,
locations='zoneName',
featureidkey="properties.zoneName",
color='random_value',
color_continuous_scale="Viridis",
range_color=(0, 12),
mapbox_style="carto-positron",
zoom=0.5,
center={"lat": 52.0, "lon": 19.0}, # Center on Poland
opacity=0.2
)
fig.update_layout(
title_text='Test Display of Shapefile',
title_x=0.5
)
fig.show()
我正在其他线程中寻找解决方案,例如: Plotly Choropleth_mapbox 与 Dash 交互性图,但我不完全理解这一点,因为这个 .shp 文件不是像我的那样生成的。在 shp 文件和 df 数据框中的数据之间有一个“zoneName”形式的键,但它没有正确映射,请在此处查看Fig.show()的输出
Geojson 顶部
{
"type": "FeatureCollection",
"features": [
{
"id": "0",
"type": "Feature",
"properties": {
"zoneName": "AT",
"layer": "AT",
"path": "C:/Users/User/Downloads/AT.geojson"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
348557.28869994543,
83876.34420647845
],
[
349103.56787464337,
78661.40107473545
],