如何解决如何将数据从两列传递到使用folium制作的等值线图标记的弹出标签?
我希望每个弹出窗口都有条形的名称和在 WB100 列表中的位置,列:条形、wb_pos。这是我的代码,某些原因每个标记的弹出窗口都是相同的 = "Tokyo" 请参阅附加的数据框和输出。
请参阅下面的部分数据框:
data = {'Bar': {0: 'Connaught Bar',1: 'Dante',2: 'The Clumsies',3: 'Atlas',4: 'Tayēr + Elementary'},'City': {0: 'London',1: 'New York',2: 'Athens',3: 'Singapore',4: 'London'},'Country': {0: 'UK',1: 'USA',2: 'Greece',4: 'UK'},'Delivery': {0: 0,1: 1,2: 1,3: 1,4: 1},'Latitude': {0: 51.507351,1: 40.7128,2: 37.9838,3: 1.3521,4: 23.7275},'Longitude': {0: 0.1278,1: 74.006,2: 23.7275,3: 103.8198,4: 0.1278},'Region': {0: 'Europe',1: 'North America',2: 'Europe',3: 'Asia',4: 'Europe'},'Shop': {0: 1,2: 0,'Takeway': {0: 0,3: 0,'Virtual Events': {0: 0,1: 0,4: 0},'first_submission': {0: 0,'wb_pos': {0: 1,1: 2,2: 3,3: 4,4: 5}}
dfcv = pd.DataFrame(data)
import pandas as pd
import folium
import branca
from folium.plugins import MarkerCluster
world_geo = r'world_countries.json' # geojson file
world_map=folium.Map(location=[0,0],zoom_start=3,width=1100,height=800,tiles='cartodb positron',max_bounds=True)
world_map.choropleth(
name='choropleth WB100',geo_data=world_geo,data=dfcv,columns=['Country','Total'],key_on='feature.properties.name',nan_fill_color='white',nan_fill_opacity=0.1,fill_color='Blues',fill_opacity=0.7,line_opacity=0.2,legend_name='Worlds Best 100 Bars'
)
world_map
mapa = folium.map.FeatureGroup()
# loop through the WB100 and add each Bar location,name and WB100 position
for lat,lng,bar,pos in zip(df.Latitude,df.Longitude,df.Bar,df.wb_pos):
mapa.add_child(
folium.CircleMarker(
[lat,lng],label='{},{}'.format(bar,pos),popup=label,radius=5,# define how big you want the circle markers to be
color='yellow',fill=True,fill_color='blue',fill_opacity=0.6
).add_to(mapa)
)
world_map.add_child(mapa)
解决方法
您的代码中存在一些错误,这是一个基于输入数据的“wb_pos”字段的工作示例,因为您实际上没有任何 Total
字段。
import pandas as pd
df = pd.DataFrame(df) # Needed to convert your dict to an actual DataFrame
world_geo = 'https://raw.githubusercontent.com/jdamiani27/Data-Visualization-and-D3/master/lesson4/world_countries.json' # geojson file
world_map = folium.Map(
location = [0,0],zoom_start = 3,width = 1100,height = 800,tiles = 'cartodb positron',max_bounds = True
)
world_map.choropleth(
name = 'choropleth WB100',geo_data = world_geo,data = df,# Replaced dfcv because it was not defined in your input data
columns = ['Country','wb_pos'],# Replaced the 'Total' by another random column,here 'wb_pos'
key_on = 'feature.properties.name',nan_fill_color = 'white',nan_fill_opacity = 0.1,fill_color = 'Blues',fill_opacity = 0.7,line_opacity = 0.2,legend_name = 'Worlds Best 100 Bars'
)
world_map
mapa = folium.map.FeatureGroup()
# loop through the WB100 and add each Bar location,name and WB100 position
for lat,lng,bar,pos in zip(
df.Latitude,df.Longitude,df.Bar,df.wb_pos):
label= '{},{}'.format(bar,pos) # Define label here to reuse after
mapa.add_child(
folium.CircleMarker(
[lat,lng],label = label,popup = label,radius = 5,# define how big you want the circle markers to be
color = 'yellow',fill = True,fill_color = 'blue',fill_opacity = 0.6
).add_to(mapa)
)
# Build a CircleMarker for each row based on the lat long of the record
df.apply(lambda row: folium.CircleMarker(
location=[row["Latitude"],row["Longitude"]],radius=10,).add_to(world_map),axis=1)
world_map.add_child(mapa)
我还必须修复您的 label
,它引发了错误,因为当它们传递给函数时,您不能在同一参数列表中重用参数,您需要在 之前定义它.
这是相应的结果:
请注意,所有具有地理性质的问题都存在 https://gis.stackexchange.com/。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。