1

我想在 Python 中创建一个热图,类似于 TomTom Move 的此屏幕截图底部显示的内容: https ://d2altcye8lkl9f.cloudfront.net/2021/03/image-1.png (来源:https:// /support.move.tomtom.com/ts-output-route-analysis/

一条路线包含多个长度不同的路段。每个段都包含我想使用颜色图着色的平均速度(绿色表示快速,黄色到红色表示慢速)。我能够使用堆叠的 histplot 以正确的顺序绘制每个段,但是当我添加色调时,它会将平均速度最快的段排序到最慢,而不是段的正确顺序。

三个时间集包含 4 个分段,每个分段的长度、到目前为止的路线长度和每个分段的速度。

import pandas as pd 

d = {'timeRanges': ['00:00-06:30', '00:00-06:30', '00:00-06:30', '00:00-06:30', '07:00-15:00', '07:00-15:00', '07:00-15:00', '07:00-15:00', '16:00-17:30', '16:00-17:30', '16:00-17:30', '16:00-17:30'], 'segmentOrder': [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], 'segmentDistance': [20, 45, 60, 30, 20, 45, 60, 30, 20, 45, 60, 30], 'distanceAlongRoute': [20, 65, 125, 155, 20, 65, 125, 155, 20, 65, 125, 155], 'averageSpeed': [54.2, 48.1, 23.5, 33.7, 56.2, 53.2, 42.5, 44.2, 50.2, 46.2, 35.3, 33.2]}
df = pd.DataFrame(data=d)

我已经尝试使用 seaborn heatmap 和 imshow,但我还没有让每个段的 x 轴块宽度发生变化。

非常感激。

4

1 回答 1

0

这是具有不同框大小的热图的简单示例。基于示例“块大小不等的热图” https://plotly.com/python/heatmaps/。只需将 xe 变量设置为所有 x 轴边缘,将 z 设置为将用于确定这些点之间颜色的值。z 值应该比 xe 值少 1 个。

import plotly.graph_objects as go
import numpy as np

xe = [0, 1, 2, 5, 6]
ye = [0, 1]
z = [[1, 2, 1, 3]]


fig = go.Figure(data=go.Heatmap(
          x = np.sort(xe),
          y = np.sort(ye),
          z = z,
          type = 'heatmap',
          colorscale = 'Viridis'))

fig.update_layout(margin = dict(t=200,r=200,b=200,l=200),
    showlegend = False,
    width = 700, height = 500,
    autosize = False
                  )
fig.show()

在此处输入图像描述

于 2021-09-29T03:28:01.997 回答