使用属性、folium、python Dataframe 设置颜色

ubbxdtey  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(234)

我想CircleMarker使用参数设置颜色,有这种可能性吗?我有类似下面的 Dataframe :

lon     lat  segment
ABMF00GLP  -61.528  16.262       41
ABPO00MDG   47.229 -19.018       71
ACRG00GHA   -0.207   5.641       16
AGGO00ARG  -58.140 -34.874        4
AIRA00JPN  130.600  31.824       20
...            ...     ...      ...
YKRO00CIV   -5.240   6.871       16
ZAMB00ZMB   28.311 -15.426       90
ZECK00RUS   41.565  43.788       67
ZIM200CHE    7.465  46.877       81
ZIM300CHE    7.465  46.877       81

我可以添加与下面相同颜色的标记,不幸的是,我不知道如何使它分段相关。

for x in df.index:
    folium.CircleMarker(list(np.array(df.loc[x])),
                      popup=x,
                      radius=3,
                      color = "red",
                      ).add_to(m)
lsmepo6l

lsmepo6l1#

引入一个连续的色彩Map表,并在段列中设置最小值和最大值。在标记颜色设置中将段值作为参数。有关色彩Map表,请参阅more information

import pandas as pd
import numpy as np
import io
import folium
import branca.colormap as cm

data = '''
id lon     lat  segment
ABMF00GLP  -61.528  16.262       41
ABPO00MDG   47.229 -19.018       71
ACRG00GHA   -0.207   5.641       16
AGGO00ARG  -58.140 -34.874        4
AIRA00JPN  130.600  31.824       20
YKRO00CIV   -5.240   6.871       16
ZAMB00ZMB   28.311 -15.426       90
ZECK00RUS   41.565  43.788       67
ZIM200CHE    7.465  46.877       81
'''

df = pd.read_csv(io.StringIO(data), delim_whitespace=True)

linear = cm.LinearColormap(["green", "yellow", "red"], vmin=df['segment'].min(), vmax=df['segment'].max())

m = folium.Map([df['lat'].mean(), df['lon'].mean()], tiles="cartodbpositron", zoom_start=2)

for _, row in df.iterrows():
    folium.CircleMarker([row.lat, row.lon],
                      popup=row.id,
                      radius=3,
                      color = linear(row.segment),
                      ).add_to(m)

m

piwo6bdm

piwo6bdm2#

Geopandas有非常有用的交互式制图,当你在geopandas dataframe上调用这个方法时,它会返回foliumMap示例。
要根据segment值为标记着色,只需执行以下操作:

df.explore(
     column='segment')

请注意,你的数据框必须是geopandas数据框,而不仅仅是Pandas数据框。

相关问题