News in emojifont
面向对象有多种实现方式,R里面就有3种,class-based, method-based, object-based,R6与C++/JAVA一样是class-based的,S3/S4是method-based的,还有一种是object-based的,这在proto包中实现,很多人可能没听说过,但是ggplot2你们一定听过,ggplot2就是object-based的实现,它现在是自己的定制实现,称之为ggproto。
emojifont就是用proto实现的,属于我的练手之作,很高兴深受大家的喜欢。
如果我想看一个emoji长啥样,用ggplot2还是麻烦点,用ggplot2是这样画的:
而用base plot,则相对简单些:
![](https://guangchuangyu.github.io/blog_images/R/emojifont/Screen Shot 2017-02-14 at 8.00.23 PM.png)
于是我有了要写个geom_emoji图层的想法:
我在想应该利用emojifont,写个geom_emoji图层,这样直接ggplot()+geom_emoji(“broken_heart”)就可以直接出来,ggplot()+geom_emoji(“chicken”)就出来一只,虽然emojifont已足够易用,但减少输入更加傻瓜,还是可以有的。
过了一天,我就写了geom_emoji,于是如果我想看某个emoji长什么样,比如下面画个玫瑰花:
ggplot() + geom_emoji("rose") + theme_void()
这次的更新,我还换个emoji字体,升级到unicode 9,也就是最新加入的鸭子也能用咯:
ggplot() + geom_emoji("duck") + theme_void()
geom_emoji让画散点也变得简单:
x <- seq(-sqrt(17), sqrt(17), length.out=30)
y1 <- 8*abs(x)/17 + 15* sqrt(17 - x^2)/17
y2 <- 8*abs(x)/17 - 15* sqrt(17 - x^2)/17
ggplot() + geom_emoji("gift_heart", x=x, y=c(y1, y2), color="red", size=10)
制作动图gif也是非常简单,这个代码简直如同人类语言一般:
require(ggplot2)
require(magick)
require(purrr)
x <- search_emoji("heart")
plot_heart=function(x) {
p = ggplot() + geom_emoji(x)
o = paste0(x, ".png")
ggsave(o, p, width=5, height=5)
o
}
x %>% map(plot_heart) %>% map(image_read) %>%
image_join() %>% image_animate(fps=1) %>%
image_write("heart.gif")
因为换了字体,所以和之前的不同,如果要去背景,只需要+theme_void()
就可以。
新版也不同你加载字体的,随包载入自动加载,当然以前的字体还能用,还用一样的办法手工加载。(所以说我这次升级很考究,原来的字体,老方法,新字体你啥都不用干)
同时加入的还有geom_fontawesome图层,最新画hex sticker,用fontawesome蛮好用 -,-
这次更新,主要有3方面:升级了新字体,支持unicode 9;新加入的图层让你非常方便地看一看emoji表情长啥样;再者不需要手工加载字体了。
我在网上看到香港R用户组的教学视频,发现我被‘出镜了’,讲解了emojifont包,好像我在香港还有点小名气,然而我并没有露过脸,视频中也没有。