返回

掘金贡献图(d3绘制github contributions图)

前端

前些日子,我无意中在 GitHub 上注意到一个“293 contributions in the last year”这样的东东,如下图所示,感觉很有趣,于是花了半天的时间查阅资料,现在就来和大家分享一下这个模块的具体实现方式。

实现这个模块需要借助第三方 js 插件,这里有鼎鼎大名的 d3。

首先,我们需要创建一个 HTML 文件,并在其中添加以下代码:

<!DOCTYPE html>
<html>
<head>
  
  <script src="d3.min.js"></script>
</head>
<body>
  <div id="graph"></div>
</body>
</html>

接着,我们需要创建一个 CSS 文件,并在其中添加以下代码:

#graph {
  width: 600px;
  height: 400px;
}

.cell {
  fill: #eee;
  stroke: #ccc;
  stroke-width: 1px;
}

.cell-active {
  fill: #000;
}

最后,我们需要创建一个 JavaScript 文件,并在其中添加以下代码:

var margin = {top: 20, right: 20, bottom: 30, left: 40},
    width = 600 - margin.left - margin.right,
    height = 400 - margin.top - margin.bottom;

var x = d3.scaleBand()
    .rangeRound([0, width])
    .padding(0.1);

var y = d3.scaleLinear()
    .rangeRound([height, 0]);

var svg = d3.select("#graph")
    .append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
    .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

d3.csv("data.csv", function(error, data) {
  if (error) throw error;

  x.domain(data.map(function(d) { return d.date; }));
  y.domain([0, d3.max(data, function(d) { return d.count; })]);

  svg.selectAll(".cell")
      .data(data)
    .enter().append("rect")
      .attr("class", "cell")
      .attr("x", function(d) { return x(d.date); })
      .attr("y", function(d) { return y(d.count); })
      .attr("width", x.bandwidth())
      .attr("height", function(d) { return height - y(d.count); })
      .on("mouseover", function(d) {
        d3.select(this)
          .classed("cell-active", true);
      })
      .on("mouseout", function(d) {
        d3.select(this)
          .classed("cell-active", false);
      });
});

其中,data.csv 是一个包含日期和贡献次数的数据文件,你可以根据自己的需要进行修改。

运行这段代码后,你就可以看到一个交互式的 GitHub 贡献图了。你可以将鼠标悬停在某个日期上,以查看该日期的贡献次数。

希望这篇教程对你有帮助!

SEO 关键词:

文章