P. *_*lin 5 python data-visualization folium
我尝试使用 folium 根据速度(就像 Strava 等应用程序一样)使用不同颜色的比赛路径。
我看到您可以根据数据更改标记的颜色,但我无法使用折线对其进行转置。
这是我的可视化代码:
points = []
for track in gpx.tracks:
for segment in track.segments:
for point in segment.points:
points.append(tuple([point.latitude, point.longitude]))
ave_lat = sum(p[0] for p in points)/len(points)
ave_lon = sum(p[1] for p in points)/len(points)
my_map = folium.Map(location=[ave_lat, ave_lon], zoom_start=13)
folium.PolyLine(points, color="red", weight=2.5, opacity=1).add_to(my_map)
Run Code Online (Sandbox Code Playgroud)
我还有一个带有经度、纬度和速度的数据框,我希望线条根据速度改变颜色。
小智 7
大叶有 ColorLine :
folium.ColorLine(
positions = segments, # tuple of coordinates
colors = speed, # map each segment with the speed
colormap = colormap, # map each value with a color
).add_to(base)
Run Code Online (Sandbox Code Playgroud)
PolyLine 函数没有内置方法可以为您执行此操作。颜色参数需要一个字符串值:“red”或“#FF0000”。因此,我知道的最简单的方法是创建一个字典,以舍入速度作为键,以所需的颜色十六进制代码作为值:
给定一个包含坐标的数据框:
>>> coordinates = {'lat':[52.354, 52.081, 52.384], 'lng':[4.903, 5.099, 4.643]}
>>> df = pd.DataFrame(data=coordinates, index=['Amsterdam', 'Utrecht', 'Haarlem'])
>>> df
lat lng
Amsterdam 52.354 4.903
Utrecht 52.081 5.099
Haarlem 52.384 4.643
Run Code Online (Sandbox Code Playgroud)
以及包含这些之间的速度的字典:
>>> dict_speed = {}
>>> cities_all = df.index.to_list()
>>>
>>> for origin in df.index:
... dict_speed[origin] = {
... desti: np.random.uniform(3, 30) for desti in cities_all if origin != desti
... }
... cities_all.remove(origin)
...
>>> dict_speed
{'Amsterdam': {'Utrecht': 11.17300608896625, 'Haarlem': 28.078139459927645},
'Utrecht': {'Haarlem': 17.07939077211872},
'Haarlem': {}}
Run Code Online (Sandbox Code Playgroud)
最后的成分:使用此链接为我们提供给定速度所需颜色的映射字典(http://blogs.perl.org/users/ovid/2010/12/perl101-red-to-green-gradient.html):
list_colors = [
"#00FF00",
"#12FF00",
"#24FF00",
"#35FF00",
"#47FF00",
"#58FF00",
"#6AFF00",
"#7CFF00",
"#8DFF00",
"#9FFF00",
"#B0FF00",
"#C2FF00",
"#D4FF00",
"#E5FF00",
"#F7FF00",
"#FFF600",
"#FFE400",
"#FFD300",
"#FFC100",
"#FFAF00",
"#FF9E00",
"#FF8C00",
"#FF7B00",
"#FF6900",
"#FF5700",
"#FF4600",
"#FF3400",
"#FF2300",
"#FF1100",
"#FF0000",
]
color_dict = {i: list_colors[i] for i in range(len(list_colors))}
Run Code Online (Sandbox Code Playgroud)
和绘图代码:
my_map = folium.Map(
location=[np.mean(df["lat"].values), np.mean(df["lng"].values)],
zoom_start=7,
tiles="Stamen Terrain",
)
for city, row in df.iterrows():
folium.Marker([row["lat"], row["lng"]], tooltip=city).add_to(my_map)
for origin, _ in dict_speed.items():
for desti, speed in _.items():
folium.PolyLine(
(df.loc[origin].values, df.loc[desti].values),
color=color_dict[round(speed)],
).add_to(my_map)
my_map
Run Code Online (Sandbox Code Playgroud)
您将获得一张大叶地图,其中颜色指示速度!
>>> coordinates = {'lat':[52.354, 52.081, 52.384], 'lng':[4.903, 5.099, 4.643]}
>>> df = pd.DataFrame(data=coordinates, index=['Amsterdam', 'Utrecht', 'Haarlem'])
>>> df
lat lng
Amsterdam 52.354 4.903
Utrecht 52.081 5.099
Haarlem 52.384 4.643
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14345 次 |
| 最近记录: |