如何在 Folium 中将聚类标记添加到 Choropleth 地图上

3

我已经在Folium中使用Choropleth和Cluster marker地图工作了一段时间(它们非常棒)。我的问题是是否可以将它们组合在一个地图中,这样我就可以看到一个变量对另一个变量的影响有多大。我可以分别使用两种地图类型,所以没有问题。这是我迄今为止尝试组合两者的代码:

import pandas as pd
import folium
from folium.plugins import MarkerCluster

input_filename="input_filename.csv"
df = pd.read_csv(input_filename,encoding='utf8')
geo = 'blah.json'
comparison = 'comparison.csv'
comparison_data = pd.read_csv(comparison)

m = folium.Map(location=[Lat,Lon], zoom_start=12)

folium.Choropleth(
    geo_data=geo,
    name='choropleth',
    data=comparison_data,
    columns=['col1','col2'],
    key_on='feature.properties.ID',
    fill_color='OrRd',
    fill_opacity=0.5,
    line_opacity=0.5,
    legend_name='Blah (%)'
).add_to(m)

folium.LayerControl().add_to(m)
marker_cluster = MarkerCluster().add_to(m)

for row in df.itertuples():
    folium.Marker(location=[row.Lat,row.Lon],popup=row.Postcode).add_to(marker_cluster)

m

它可以生成区域分布图,但无法将聚类标记叠加在上面。值得注意的是,我曾经遇到过单独使用聚类标记时的问题,在Jupyter笔记本中无法显示,但我通过将文件保存为HTML来解决了这个问题,然后就可以查看了。

2个回答

9

好的,我解决了,真高兴!解决方法是先进行标记聚类,然后再跟进 Choropleth:

import pandas as pd
import folium
from folium.plugins import MarkerCluster

m = folium.Map(location=[Lat,Lon], zoom_start=12)

input_filename="input_filename.csv"
df = pd.read_csv(input_filename,encoding='utf8')
geo = 'blah.json'
comparison = 'comparison.csv'
comparison_data = pd.read_csv(comparison)

folium.LayerControl().add_to(m)
marker_cluster = MarkerCluster().add_to(m)

for row in df.itertuples():
    folium.Marker(location=[row.Lat,row.Lon],popup=row.Postcode).add_to(marker_cluster)

folium.Choropleth(
    geo_data=geo,
    name='choropleth',
    data=comparison_data,
    columns=['col1','col2'],
    key_on='feature.properties.ID',
    fill_color='OrRd',
    fill_opacity=0.5,
    line_opacity=0.5,
    legend_name='Blah (%)'
).add_to(m)

m

-1
from random import randint
import folium

def rgb_to_hex(rgb):
    return '#%02x%02x%02x' % rgb

mp = folium.Map(location=[40.6, -73.7], scale = 10)

colors = []
while len(colors) != 50:
    r = randint(0, 255)
    g = randint(0, 255)
    b = randint(0, 255)
    if rgb_to_hex((r, g, b)) not in colors:
        colors.append(rgb_to_hex((r, g, b)))
        
for j in range(df.shape[0]):
    lat = df.iloc[j]['latitude']
    lon = df.iloc[j]['longitude']
    color = colors[int(df.iloc[j]['clust'])]
    
    folium.Circle(location=[lat, lon], radius=8, color = color).add_to(mp)

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接