返回

自动生成Github活跃贡献日历,展示你的编程精彩人生

前端

Github活跃贡献图的实现原理及其手动实现指南

在浏览GitHub或GitLab时,我们常能看到一张直观展示用户活跃度的图示,这就是Github活跃贡献图。那么,它是如何实现的呢?

Github活跃贡献图原理

Github活跃贡献图的原理并不复杂,它基于Git日历坐标系,利用代码将Git提交记录转换为可视化的图形。

Git日历坐标系

Git日历坐标系是一个二维坐标系,横轴代表时间,纵轴代表日期。每个格子代表一天,格子中的颜色表示用户在这一天是否有提交代码。

例如,某用户在2023年3月8日提交了代码,那么在Git日历坐标系中,2023年3月8日对应的格子将被着色。

手动实现Github活跃贡献图步骤

要手动实现Github活跃贡献图,需要掌握以下步骤:

  1. 获取Git提交记录
git log --pretty=format:"%ad %H"

这将以以下格式输出提交记录:

2023-03-08 12:34:56 123456789abcdef
2023-03-07 11:22:33 abcdef123456789
...
  1. 将提交记录转换为Git日历坐标系
import calendar
import datetime

def convert_to_git_calendar(commit_log):
  git_calendar = [[' ' for _ in range(7)] for _ in range(6)]
  for line in commit_log.splitlines():
    date, time = line.split(' ')[0:2]
    year, month, day = map(int, date.split('-'))
    hour, minute, second = map(int, time.split(':'))
    weekday = calendar.weekday(year, month, day)
    git_calendar[month - 1][weekday] = 'X'
  return git_calendar
  1. 可视化Git日历坐标系
import matplotlib.pyplot as plt

def visualize_git_calendar(git_calendar):
  fig, ax = plt.subplots()
  fig.set_size_inches(7, 6)
  ax.set_xlabel('星期')
  ax.set_ylabel('月份')
  ax.set_xticks(range(7))
  ax.set_xticklabels(['一', '二', '三', '四', '五', '六', '日'])
  ax.set_yticks(range(6))
  ax.set_yticklabels(['1', '2', '3', '4', '5', '6'])
  ax.imshow(git_calendar, cmap='binary')
  plt.show()

结论

通过以上步骤,即可手动实现Github活跃贡献图。它能直观地展示你的编程历程,激励你持续贡献代码。

常见问题解答

  1. 如何获取Git提交记录?
    git log --pretty=format:"%ad %H"
    
  2. 如何计算星期几?
    weekday = calendar.weekday(year, month, day)
    
  3. 如何可视化Git日历坐标系?
    plt.imshow(git_calendar, cmap='binary')
    
  4. 如何修改格子颜色?
    cmap='binary'  # 黑色或白色
    cmap='RdYlGn'  # 红色到绿色
    
  5. 如何添加图例?
    plt.colorbar()