python - Folium choropleth key_on - 我错过了一些明显的东西
问题描述
我正在尝试按邮政编码计算已安装的光伏容量。我在熊猫系列(tas_kW_series)中获得了安装数据,索引是 int 的邮政编码。我已经下载了澳大利亚的 ESRI 形状文件,将它们转换为 GeoJson(使用在线工具)。视觉上格式是正确的。我不得不将 Geojson 拆分为多个状态以减小大小,单个 json 与 geojson 层一起使用,但不是 choropleth
我可以让形状显示在 Geojson 图层上,但 choropleth 失败了,在我认为的“key_on”参数上,我只是无法弄清楚它有什么问题 - 它映射到 geojson 的正确部分,并且输入数据是一个系列,因此无需提供列名。
我必须添加一个新的“属性”字段(“pc_int”),并将邮政编码转换为“int”以匹配系列的索引。这是在 json 文件中
数据的邮政编码比geojson多,我已经删除了多余的
我已经检查了所有我知道geojson的结构如何与我在调用者中使用的'feature.properties.pc_int'相匹配的方法。
我已经浏览了源代码,我很确定它是正确的
Postcode Data (following tas_kW_series.to_dict())
{7000: 2027.2620000000002,
7001: 94.36,
7002: 13.5,
7004: 910.943,
7005: 1644.2499999999998,
7006: 25.1,
7007: 612.258,
7008: 1525.3100000000004,
7009: 1478.017,
7010: 1876.863,
7011: 1770.325,
7012: 205.06,
7015: 1557.3830000000003,
7016: 233.579,...
GeoJson(进行一些编辑以删除多边形细节) TAS_data = json.load(TAS.json)
TAS_data['features'][0] =
{'type': 'Feature',
'geometry': {'type': 'Polygon',
'coordinates': [[[147.3199543290001, -42.85551239399996],
[147.32003433700004, -42.85554737699994],
[147.32014234000007, -42.85558237899994],
[147.3202043540001, -42.855599380999934],...
...
[147.31961900400006, -42.856079991999934],
[147.31967809700006, -42.85600952499993],
[147.3199543290001, -42.85551239399996]]]},
'properties': {'POA_CODE16': '7000',
'POA_NAME16': '7000',
'AREASQKM16': 10.8544,
'pc_int': 7000}}
Choropleth 呼叫 -
folium.Choropleth(geo_data = 'TAS.json',
data = tas_kW_series,
name = 'Tasmania STC Installations - Total Capacity (kW)',
key_on = 'feature.properties.pc_int',
bins = 10,
fill_opacity = 0.7,
line_opacity = 0.2,
legend_name = 'Installed Capacity (kW)').add_to(m)
追溯
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-46-7bcc2e3b37d6> in <module>
7 fill_opacity = 0.7,
8 line_opacity = 0.2,
----> 9 legend_name = 'Installed Capacity (kW)').add_to(m)
~\AppData\Local\conda\conda\envs\mlbook\lib\site-packages\folium\features.py in __init__(self, geo_data, data, columns, key_on, bins, fill_color, nan_fill_color, fill_opacity, nan_fill_opacity, line_color, line_weight, line_opacity, name, legend_name, overlay, control, show, topojson, smooth_factor, highlight, **kwargs)
932 self._name = 'Choropleth'
933
--> 934 if data is not None and not color_brewer(fill_color):
935 raise ValueError('Please pass a valid color brewer code to '
936 'fill_local. See docstring for valid codes.')
~\AppData\Local\conda\conda\envs\mlbook\lib\site-packages\branca\utilities.py in color_brewer(color_code, n)
147
148 if base_code not in core_schemes:
--> 149 raise ValueError(base_code + ' is not a valid ColorBrewer code')
150
151 try:
ValueError: blue is not a valid ColorBrewer code
预期输出是叶图上的等值线层,根据 tas_kW_series 中的值的分箱进行着色。实际输出是上面的回溯。
解决方案
错误来自默认设置的因为的fill_color
属性:folium.Choropleth
blue
fill_color: string, default 'blue'
| Area fill color. Can pass a hex code, color name, or if you are
| binding data, one of the following color brewer palettes:
| 'BuGn', 'BuPu', 'GnBu', 'OrRd', 'PuBu', 'PuBuGn', 'PuRd', 'RdPu',
| 'YlGn', 'YlGnBu', 'YlOrBr', and 'YlOrRd'.
将其更改为正常颜色,例如Blues
,Reds
(使用 s,因为您有多个垃圾箱)或上面颜色 brewer 调色板中列出的内容,例如'BuGn'
,'BuPu'
...
推荐阅读
- java - Java:如何提升战士等级?
- kotlin-multiplatform - SQLDelight - java.lang.UnsatisfiedLinkError:找不到“libsqlitejdbc.so”
- kubernetes - 同一节点中同一 pod 的多个实例 - Kubernetes
- reactjs - react中的axios在本地工作,但在heroku中不起作用
- spring-boot - 将springboot war文件上传到Weblogic 12.2.1.3服务器时出错
- python - 为什么这个 Python 文件(解析 XML 和验证)可以在 Windows 上工作,但不能在 Mac OS 上工作?
- r - 将开始和结束范围中的重叠分离到自己的数据框行中
- amazon-web-services - AWS Sagemaker Studio 本地 RAM 过载
- javascript - return 语句后的括号
- fortran - Fo Householder Transformation QR 分解的标志问题