在Python中使用位置颜色比例可视化移动速度
我有3个主要值(经度、纬度和速度)。使用Folium库,我可以用lon和lat度绘制位置图。但是现在我想把速度和色阶放在一起。例如,如果速度在0-20之间,则线条部分为红色,如果速度在20-60之间,则线条为黄色,如果速度高于60,则线条为绿色。可以用python来做吗?有人能帮我吗?我目前的代码是:在Python中使用位置颜色比例可视化移动速度,python,google-maps,visualization,folium,Python,Google Maps,Visualization,Folium,我有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="b
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
这里的“点”是lon和lat对。但我的csv中也有速度栏。我的输出是这样的。有人能帮我吗?谢谢
但我想为数据可视化添加速度列,以获得类似的结果
您可以为每个点的颜色关键字添加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
为此,您需要一个包含两列的数组点
,一个数组速度
与点
的行数相同。
请注意,您可以将
cm.cividis
更改为任何适合您需要的内容(请参阅参考资料)很抱歉,但您确定吗?这是没有记录在这里道歉,我的意思是说十六进制值!我的意思是,你确定你可以为每个点指定颜色吗?是的,诀窍是通过每个点循环,并为每个线段设置值。类似于~~的颜色,点在拉链上(颜色,点):folium.PolyLine(点,颜色=颜色)。添加到(我的地图)~~这里我只使用两列,latitute和longitute列非常感谢您的帮助。但是我从这部分中得到了一些错误。如果你能帮我解决这个问题,我真的很感激。因为我是pyhton的新手,这个任务对我来说非常重要。下面是下一条注释中的代码,我的错误是“太多的值无法解包(预期为3)”。我还想指定每一速度变化的颜色限制,正如我在问题描述中提到的,因为函数中有一些错误。然而,如果你有很重的GPS轨迹,通过这种方法单独添加点,你会得到一张需要数小时才能打开的巨大地图。。不知道其他方法rgb2hex在matplotlib.colors.rgb2hex
中可用。