看啥推荐读物
专栏名称: Pope怯懦懦地
心存感恩地生活,自然而然地學習。
今天看啥  ›  专栏  ›  Pope怯懦懦地

怎么用 Numbers 可视化展现初生宝宝拉粑粑💩的记录

Pope怯懦懦地  · 简书  · 程序员  · 2017-11-04 11:25

记录初生宝宝拉粑粑💩有什么意义?没什么意义,just for fun👻

我们的目标是画一张这样的图:

竖轴是小时数,横轴是天数。如果小朋友哪个时间拉粑粑💩了,对应的方格会自动标绿
竖轴是小时数,横轴是天数。如果小朋友哪个时间拉粑粑💩了,对应的方格会自动标绿

下面我们开始吧。首先,你得有数据,弄到一张表格上:

序号 粑粑💩发现时间
0 2017-10-28 23:29
1 2017-10-29 8:30
2 2017-10-29 12:00
3 2017-10-29 18:00
4 2017-10-30 1:10
5 2017-10-30 18:00
... ...

然后是做一些数据规整。

  1. 添加一列,用DATE(YEAR(...), MONTH(...), DAY(...))提取日期;
  2. 添加一列,提取距离出生日期的天数;
  3. 添加一列,用HOUR(...)提取拉粑粑💩的小时数;

现在,表格变成了这样:

序号 粑粑💩发现时间 粑粑💩间隔 date 出生🐣 查便时间
0 2017-10-28 23:29 10/28/17 0 23
1 2017-10-29 8:30 9h 1m 10/29/17 1 8
2 2017-10-29 12:00 3h 30m 10/29/17 1 12
3 2017-10-29 18:00 6h 10/29/17 1 18
4 2017-10-30 1:10 7h 10m 10/30/17 2 1
5 2017-10-30 18:00 16h 50m 10/30/17 2 18
... ... ... ... ... ...

然后,新建一张表格,画出「24×天数」的长条。现在的任务是让 Numbers 自动读取前一张表格的数据,然后讲相应方格标绿。

我们注意到:可以将前一张表格的最后两列作为坐标。我本来想分别读取X坐标 & Y坐标,但弄了半天,放弃了。最后决定添加一个辅助列hash,以编码坐标:

    = X × 48 + Y

这样,就可以用MATCH(...)定位坐标:

IF(
    IFERROR(
        MATCH(C$2×48+$B3,$hash,0),
        FALSE),
    " ",
    "   ")

这句函数的意思是:我们将方格的坐标编码,看看有没有这个数据点;如果查到了,返回「1 个空格」,否则返回「3 个空格」。之所以选用空格,是为了不显示出来。

现在就可以用「Conditional Highlighting」把「1 个空格」的方格标绿。

好了,现在只要录入数据,图标就会自动将相应方格标绿了👻


如果我们希望在标绿的同时能够根据数据大小标出深浅来,还可以进一步改进。

首先,将函数改为:

IF(
    COUNTIF($hash,C$2×48+$B3)=0,
    "",
    IF(
        COUNTIF($hash,C$2×48+$B3)=1,
        " ",
        IF(
            COUNTIF($hash,C$2×48+$B3)=2,
            "  ",
            "   ")))

不过就是一个switch语句,只是 Numbers 没提供,只好用这种丑陋的方式实现。

然后,依次将「1 个空格」「2 个空格」「3 个空格」标示成不同深浅的绿色就好了👻

这是我家宝宝喂奶🍼的时刻分布图😪
这是我家宝宝喂奶🍼的时刻分布图😪



原文地址:访问原文地址
快照地址: 访问文章快照