无缘无故收到好几条消息,原来是用emoji画图。

做为emojifont包的作者,我表示很高兴看到自己的包给大家带来乐趣,在回复中@milerdl说emoGG是他用了两个晚上写的,emojifont刚好也是我用了两个晚上写的,一个晚上支持了emoji字体,另一个晚上加入了fontawesome字体。

在写这个包之前,我早就有用emoji在R画图中,写这个包也正是为了回应emoGG,因为我觉得他的实现方式并不理想,而我的更为灵活。

回到主题上,我将展示使用emojifont来画图。

下面这个数据是我每年读书、看电影、听专辑的数目:

> d
   year category num
1  2009     book  35
2  2009    movie  64
3  2009    music  24
4  2010     book  34
5  2010    movie  47
6  2010    music  13
7  2011     book  17
8  2011    movie  18
9  2011    music   2
10 2012     book  25
11 2012    movie  25
12 2012    music   0
13 2013     book  15
14 2013    movie  17
15 2013    music   0
16 2014     book   8
17 2014    movie  11
18 2014    music   1
19 2015     book   5
20 2015    movie  14
21 2015    music   0
22 2016     book   4
23 2016    movie  14
24 2016    music   0

先加载所需的包和emoji字体:

require(ggplot2)
require(ggthemes)
require(emojifont)
load.emojifont()
emo <- emoji(c("book", "movie_camera", "musical_note"))
names(emo) <- c('book', 'movie', 'music')

画出趋势图,并在每个点上用相应的emoji字体标注:

p <- ggplot(d, aes(x=factor(year), y=num, group=category, colour=category))
p <- p +geom_line() +geom_text(aes(label=emo[category]), family='OpenSansEmoji', size=10) +xlab(NULL) + ylab(NULL) 

更改一些背景等主题细节,设置中文字体等:
p <- p + theme_fivethirtyeight() + scale_color_tableau()
p <- p+theme(axis.text.x=element_text(face="bold", size=16), 
        axis.text.y=element_text(face="bold", size=16))
 p <- p+theme(legend.text=element_text(size=16, family="OpenSansEmoji"), 
            legend.title=element_blank(), legend.position='none')
p+ ggtitle('Y叔的书影音') + theme(plot.title=element_text(family='STKaiti'))

于是产生下图: