我有3个主要值(经度,纬度和速度)。使用Folium库我可以用lon和lat度映射位置。但现在我也要把速度与色标放在一起。例如,如果速度在0-20之间,则该部分线为红色,如果速度在20-60之间,则如果速度高于60,则该线为绿色。是不是可以在python中做到这一点?任何人都可以帮我吗?我目前的代码是:
my_map = folium.Map(location=[ave_lat, ave_long], zoom_start=14)
folium.PolyLine(points, color="blue", weight=2.5, opacity=1).add_to(my_map)
my_map
您可以为每个点的color关键字添加rgba值。
我想我也可以添加我自己的答案,因为来自@GlobalTraveler的那个涉及绘制很多线,我认为这有点脏。
看来确实在folium中没有选项可以做到这一点,但你可以改为绘制多个标记,然后单独着色
import numpy as np
from matplotlib import cm
import folium
# rgb tuple to hexadecimal conversion
def rgb2hex(rgb):
rgb = [hex(int(256*x)) for x in rgb)]
r, g, b = [str(x)[2:] for x in rgb]
return "#{}{}{}".format(r, g, b)
# Defines the color mapping from speeds to rgba
color_mapper = cm.ScalarMappable(cmap=cm.cividis)
rgb_values = color_mapper.to_rgba(speeds)[:3] # keep rgb and drop the "a" column
colors = [rgb2hex(rgb) for rgb in rgb_values]
my_map = folium.Map(location=[ave_lat, ave_long], zoom_start=14)
for point, color, speed in zip(points, colors, speeds):
folium.CircleMarker(location=point,
radius=1.25,
popup=str(speed),
fill_color=color).add_to(my_map)
my_map
要做到这一点你需要有一个数组points
与2列和一个数组speeds
尽可能多的行points
。请注意,您可以将cm.cividis
更改为适合您需求的任何内容(请参阅参考资料here)