用ggplot2给娃手工做张九九乘法表
导言: 只要肯折腾,ggplot2还是有很多花式玩法的……
![](/images/2020/0711/ggplot2.png)
2020年,受疫情影响,无数家庭意外收获了大量亲子时光。线上教育也顺势蓬勃发展,帮助家长们管束神兽,使不至于把房顶全都掀翻。我家小闺女早已不满足于20以内的加减法,于是前些天,我突发奇想开始教她乘法,并背诵起九九乘法表来。
然而,在家里找了一圈各类绘本与书籍,竟然都没有找到一张九九表。作为闲不住就想写写代码的我,自然而然地就想,能不能简单写上几行代码,来快速搞定它。
说干就干,这就动手做起来。
首先,得选择合适的语言工具。由于目的是“绘制”九九表,我第一时间想到的,当然就是R语言的ggplot2包了,它是当之无愧的统计绘图第一利器。
附注:`ggplot2`基于一套称为图形语法(The Grammar Of Graphics)的理论体系定义,将图形呈现方式独立且优雅地抽象出来,使得在数据探索及其可视化的过程中,可以随时随地任意调整数据变量与图形元素的绑定关系,让同一组数据在大相径庭的多种统计图之间快速切换,帮助寻找数据规律,因而被广泛使用。
然后,在绘图之前,需要先把数据准备好。ggplot2
要求输入数据采用数据框(data.frame
)的类型,通常更推荐使用其替代品,即dplyr
包中提供的tibble
类型。ggplot2
和dplyr
,可通过加载tidyverse
包,来一次性将其全都载入使用。为了构造形如“A x B = C
”的式子,我们可以使用expand.grid
函数来构造所有组合,并使用filter
函数过滤选出最终九九表中需要的下三角部分:
|
|
接着,我们就可以使用ggplot2
中的geom_tile
和geom_text
函数,来绘制相应的表格及等式了:
|
|
然而,这里得到的九九表,只有数字算式,而没有中文口诀。为了构造中文口诀,需要另外设计一两个辅助函数来帮助实现:
|
|
于是,最终ggplot调用变为:
|
|
其呈现效果如下所示(长按该图片可以跳转至对应github仓库):
![](/images/2020/0711/multiplication-table.png)
ggplot2
具有极强的视觉展示能力。通常,只需把相应数据构造好,然后指定合适的geom函数,就能快速定制出各种效果理想的图形来。
此外,若再结合gglocator
或getGraphicsEvent
这样的接收鼠标或键盘输入的函数,就能搞出一堆交互式的玩法来。
下面举几个我曾经用ggplot2
搞出来的小玩意儿,供体会下“不务正业的R”之魅力:
-
键盘指法练习:
https://github.com/yanlinlin82/kids.typing
-
连连看:
https://github.com/yanlinlin82/link-game-in-r
-
2048:
https://github.com/yanlinlin82/r-2048
本文意在抛砖引玉,欢迎大家多多折腾,让学习和生活都变得更丰富有趣!
注:本文首发表于“不靠谱颜论”公众号,并同步至本站。