如何从Pandas DataFrame创建活动图(如GitHub贡献图)

9 投票
1 回答
1965 浏览
提问于 2025-04-18 09:25

大家都知道这个图表:

enter image description here

这个图表展示了一周中的某一天和一年中的某个月,以及一些活动的情况。假设我有这样一个Pandas数据框:

In [87]: metadf2[['Week','Activity']]
Out[87]:
     Week Activity
weekday     
0    15  1.6
0    15  1.1
0    17  0.6
0    17  0.8
0    17  1.3
0    17  2.6
0    17  0.9
0    19  1.0
0    19  8.0
0    19  1.6
0    23  5.0
0    23  1.2
0    23  0.6
0    23  5.6
1    15  1.6
1    15  0.2
1    15  0.1
1    15  0.1
1    15  0.4
1    17  12.2
1    19  10.2
1    19  1.6
2    13  1.7
2    14  0.0
2    14  0.0
2    15  6.9
2    15  2.5
2    15  5.5
2    17  6.2
2    17  1.3
... ... ...
3    14  1.1
3    14  4.9
3    14  4.0
3    14  1.5
3    14  3.9
4    14  0.2
5    15  5.4
5    15  5.1
5    18  9.5
5    18  8.8
5    20  108.8
5    20  11.1
5    20  11.2
6    13  74.9
6    13  2.0
6    13  3.2
6    13  2.0
6    13  16.7
6    13  5.5
6    16  0.4
6    15  7.6
6    15  11.7
6    15  25.8
6    16  0.4
6    16  0.4
6    16  1.3
6    20  2.0
6    20  20.5
6    20  77.0
6    20  32.8

那么,如何用Matplotlib创建一个类似于Github活动的图表呢?我觉得使用带有nearest的等高线图是个不错的方向,对吧?

1 个回答

14

这里有一个可以让你开始的例子:

import pylab as pl
import numpy as np
import pandas as pd

# prepare some random data
N = 100
np.random.seed(0)
weekday = np.random.randint(0, 7, N)
week = np.random.randint(0, 40, N)
activity = np.random.randint(0, 100, N)

df = pd.DataFrame({"weekday":weekday, "week":week, "activity":activity})
df.drop_duplicates(subset=["weekday", "week"], inplace=True)

# reshape the data and plot it
df2 = df.pivot(columns="week", index="weekday", values="activity")
df2.fillna(0, inplace=True)

Weekday, Week = np.mgrid[:df2.shape[0]+1, :df2.shape[1]+1]
fig, ax = pl.subplots(figsize=(12, 4))
ax.set_aspect("equal")
pl.pcolormesh(Week, Weekday, df2.values, cmap="Greens", edgecolor="w", vmin=-10, vmax=100)
pl.xlim(0, df2.shape[1])

输出结果是:

在这里输入图片描述

撰写回答