跳转至

clamap 创建热力图

概要: 使用Calmap包创建类似GitHub贡献图的热力图

创建时间: 2022.09.25 19:52:41

更新时间: 2023.07.28 22:43:13

GitHub热力图

在GitHub或者Gitee等Git仓库管理网站上,对于个人提交的统计称为 Contribution Graph ,大概长这个样子
image.png
在Gitee中则是中文显示
image.png
如何用Python生成类似上面效果的图表?

使用calmap生成日历形式热力图

准备Python包

Calmap 是一个利用 Pandas 时间序列数据生成日历形式热力图的第三方Python库。本次示例需要安装的包如下

Python
pip install calmap matplotlib numpy pandas
下面使用生成的假数据演示效果。

准备数据

此处首先使用 Pandas 生成的1000天时间序列,然后使用 Numpy 随机抽取500天生成假数据

Python
1
2
3
4
5
6
7
8
import numpy as np
import pandas as pd


all_days = pd.date_range('1/1/2020', periods=1020, freq='D')
days = np.random.choice(all_days, 500)
data = np.random.randint(low=0, high=10, size=len(days))
events = pd.Series(data, index=days)

生成单独一年的热力图

下面生成2022年的数据热力图

Python
1
2
3
4
5
6
import calmap
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 3), dpi=300)
calmap.yearplot(events, year=2022)
plt.show()
cal.png

生成所有年份的热力图

此处的颜色自定义使用的 cmap 来自 Choosing Colormaps in Matplotlib — Matplotlib 3.6.0 documentation

Python
1
2
3
4
5
6
7
calmap.calendarplot(
    data=events,
    cmap='Greens',
    fig_kws={'figsize': (16, 10)},
    yearlabel_kws={'color': 'black', 'fontsize': 24},
)
plt.show()
cal.png

完整代码

Python
import calmap
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

all_days = pd.date_range('1/1/2020', periods=1020, freq='D')
days = np.random.choice(all_days, 500)
data = np.random.randint(low=0, high=10, size=len(days))
events = pd.Series(data, index=days)
plt.figure(figsize=(10, 3), dpi=300)

# calmap.yearplot(events, year=2022)

calmap.calendarplot(
    data=events,
    cmap='Greens',
    fig_kws={'figsize': (16, 10)},
    yearlabel_kws={'color': 'black', 'fontsize': 24},
)

plt.show()
# plt.savefig('./cal.png', dpi=200, bbox_inches="tight")

参考