【问题标题】:Create heatmap with variable cell width based on time duration根据持续时间创建具有可变单元格宽度的热图
【发布时间】:2022-09-28 23:40:21
【问题描述】:

我正在努力寻找一种使用 seaborn 调整单元格宽度的方法。我正在寻找一种解决方案来绘制我的数据,每个单元格的宽度与持续时间成正比。在示例代码中,我有 3 个单元格对应于 3 个“事件”,它们不会持续相同的时间(请参阅数据帧数据中的持续时间)。我想包括持续时间来缩放单元格的宽度。我还附上了用于创建plot 的示例代码和数据。有人可以帮忙吗?

import matplotlib
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

data = pd.DataFrame({\'Date\':[\'2021-01-07\', \'2021-06-07\', \'2021-07-21\'],
                     \'Duration\':[\'5 days 03:00:00\', \'15 days 02:00:00\', \'2 days 10:00:00\'],
                    \'L\':[3, 1, 3], \'Pe\':[1, 3, 1]})
data.set_index(\'Date\', inplace=True)

data_plot = data[[\'L\', \'Pe\']]

cmap=matplotlib.cm.get_cmap(\'viridis\')
color=[cmap(0.25), cmap(0.5), cmap(0.75), cmap(1)]

fig, ax = plt.subplots(figsize=(15, 3))
ax=sns.heatmap(data_plot.T, cmap=color, cbar_kws={\'label\': \'Classes\', \'ticks\':[1, 2, 3, 4]})
plt.tight_layout()
plt.show()

    标签: python


    【解决方案1】:

    一个便宜的解决方案是创建一个间距为持续时间公约数的数组,然后根据这些持续时间填充它们。因此,如果您的持续时间为 5、3 和 2 天,对应的值为 a、b 和 c,则可以创建间隔为 1 天的数组:

    array = [a,a,a,a,a,b,b,b,c,c]
    

    如果您的公约数相对于持续时间很小,这将非常失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 2018-10-21
      • 1970-01-01
      • 2019-04-21
      相关资源
      最近更新 更多