如何为基于日历的热图(calmap)创建自定义颜色图例?

问题描述 投票:0回答:1

我有一个包含全年收集的数值数据的数据框,我想将其绘制为随时间变化的热图(类似于 Github 贡献),其中

  • 月份沿 x 轴绘制
  • 天数沿 y 轴绘制
  • 每个框/数据点的颜色表示高/低数值:对于我下面的示例,蓝色代表高数字,红色代表低数字。

My heatmap/calmap example

我正在使用 Python 库 calmap,它根据 Pandas 时间序列数据生成日历热图。这是我用来创建上述热图的代码。

days = df_activities.loc[:,'Date'].to_numpy()  
events = pd.Series(df_activities.loc[:, 'ActivityLevel'].to_numpy(), index=days)
calmap.yearplot(events, cmap='RdYlBu', linewidth=0.3)
calmap.plt.title("Activity Data across 2022")

df_activites 的片段看起来像这样:

df_activites[['Date', 'ActivityLevel']].head(10)

    Date            ActivityLevel
0   2022-01-01      5.733
1   2022-01-02      1.317
2   2022-01-03      5.150
3   2022-01-04      7.283
4   2022-01-05      6.450
5   2022-01-06      8.933
6   2022-01-07      7.333
7   2022-01-08      8.483
8   2022-01-09      6.417
9   2022-01-10      5.517

问题:我想创建一个自定义图例来标记我的热图,并显示蓝色对应高活动水平,红色对应低活动水平。由于我使用的是 calmap 而不是 seaborn,因此实现此目标的最佳方法是什么?非常感谢任何帮助!

它可以像下面的图例一样简单,其中颜色/标签替换为我的数据集。

Sample legend

python matplotlib plot legend calmap
1个回答
0
投票

我想你可以尝试创建一个类似于this example的自定义离散颜色图:

from matplotlib import colors

cmap = colors.ListedColormap(['white', 'red'])

calmap.yearplot(events, cmap=cmap, vmin=events.min(), vmax=events.max(), linewidth=0.3)

或固定

vmin
/
vmax
可以根据需要使用。

我测试了这个例子,它似乎有效。

© www.soinside.com 2019 - 2024. All rights reserved.