借助 pgfplots 实现类似 GitHub 的打卡功能

借助 pgfplots 实现类似 GitHub 的打卡功能

是否可以创建一个打孔卡,使其看起来与GitHub在...的帮助下pgfplots

存储在的数据punchcard.dat

0 Monday 18
1 Monday 67
2 Monday 62
<hour> <day> <commits> 

答案1

首先,我们来选取一种适合展示影响力的颜色:

\definecolor{skyblue}{rgb}{0.447,0.624,0.812} 

pgfplots天蓝色!看起来很酷,很漂亮。添加并给它一些选项没有问题:

\usepackage{pgfplots}
    \pgfplotsset{compat=1.7}

最有趣的部分是:

  • 首先(行12)我们打开axis环境;
  • 在线上3-7我们定义了一些通用选项;
  • 9-11:让不透明度为50 * commits / 1000 + 50
  • 12-13:定义标记的大小为6.5 * commits / 1000 + 1
  • 在线上14-18我们改变标记的大小、颜色和填充。

最后:

\documentclass{standalone}

\usepackage{mathpazo}
\usepackage{pgfplots}
    \pgfplotsset{compat=newest}

\definecolor{skyblue}{rgb}{0.447,0.624,0.812}

\begin{document}
    \begin{tikzpicture}                                             %1
        \begin{axis}[                                               %2
                grid=major,                                         %3
                point meta=explicit,
                xmin=-1,
                xmax=24,
                xlabel=Hours,                                       %7
                scatter/@pre marker code/.code={
                    \pgfmathparse{                                  %9
                        \pgfplotspointmetatransformed/1000*50+50}   %10
                    \let\opacity=\pgfmathresult                     %11
                    \pgfmathparse{                                  %12
                        \pgfplotspointmetatransformed/1000*6.5+1}   %13
                    \def\markopts{                                  %14
                        mark=*,                                     %15
                        color=skyblue!\opacity,                     %16
                        fill=skyblue!\opacity,                      %17
                        mark size=\pgfmathresult}                   %18
                    \expandafter\scope\expandafter[\markopts]},
                scatter/@post marker code/.code={
                    \endscope},
                symbolic y coords={Sunday,Saturday,Friday,Thursday,Wednesday,Tuesday,Monday},
                xtick={0,...,23},
                x=0.6cm,
                y=0.6cm]
            \addplot[only marks,scatter]
                table[x index=0, y index=1, meta index=2] {punchcard.dat};
        \end{axis}
    \end{tikzpicture}
\end{document}

结果如下:

在此处输入图片描述

相关内容