使用Python创建具有不均匀块大小/堆叠条形图的热图

2024-06-18 16:12:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用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轴块宽度有所不同

非常感谢


1条回答
网友
1楼 · 发布于 2024-06-18 16:12:32

下面是一个具有不同盒子大小的热图的简单示例。基于示例“块大小不等的热图”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()

enter image description here

相关问题 更多 >