【问题标题】:Creating a heatmap with uneven block sizes / stacked bar chart using Python使用 Python 创建块大小不均匀的热图/堆积条形图
【发布时间】:2021-09-14 07:14:16
【问题描述】:

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

非常感谢。

【问题讨论】:

标签: python pandas heatmap stacked-chart tomtom


【解决方案1】:

这是一个简单的热图示例,其中包含不同的框大小。基于示例“块大小不等的热图”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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多