微软以75亿美元收购全球最大的单身交友网站GitHub,应景分享一张图片,其实这图大家并不陌生,在《听说你还不会画热图》一文中,大家早已见过。

这图实在太好玩,被套在各种场景上,今天就要教大家怎么用R,纯代码生成这样的图,简直是吐槽神器。这类图可以归入meme,画meme,当然少不了我写的meme包,这包收录在CRAN中,点击下面链接了解一下:

然而meme包主要针对的是最常见的meme形式,也就是上下加caption这种,对于现在我们要实现的这种对话形式的,可以说不是meme包单独所支持的,当然要支持也很容易,但我觉得没必要,因为可以用下面我要介绍的方式,这种方式可以说本身也是通用的meme生成方式,反正你可以任意位置加文字嘛,而且是用你熟悉的ggplot2语法,真的有这么神奇。有图有真相:

library(magick)
library(ggplot2)
library(shadowtext)
library(ggplotify)

x = image_read("meme-bg1.jpg")
p = as.ggplot(x)
p + geom_shadowtext(x=.25, y=.1, size=10, label="GITLAB", family="Impact") +
    geom_shadowtext(x=.62, y=.5, size=6, label="EVERY GITHUB\nREPO RIGHT NOW", family="Impact") +
    geom_shadowtext(x=.89, y=.25, size=7, label="MICROSOFT", family="Impact")

这段代码相当简单,你用magick读图,然后用ggplotify包把图转化成ggplot对象,然后我们就可以用ggplot2各种加图层了,就是这么简单!一般画meme用的是Impact字体,这里我也是用这个字体,当然专业画meme的话,可不是随便加个字就算了,需要文字的背景有阴影效果,这个呢,有shadowtext包可实现,详情可见《带你装逼带你飞,画图的文本打出阴影立体效果 》。

这里之所以能够这么爽,随随便便就画出专业级别的meme,就在于ggplotifyshadowtext这两个包,而这两个包的作者,就是Y叔本人啦(此处应该有掌声)。这两个包只是随手一组合,就可以当meme专业工具而已,当然它不是专门为meme制作而写的,所以一般画meme的话,还是我的meme包好用,因为有各种针对画meme的细节上的考量,比如有meme_save可以按照图片的长宽比输出文件,内置支持导入外部字体等,那么随意在各种位置上加字体的功能,我为什么不需要在meme包中加入呢?因为meme包生成的meme对象,你也可以用ggplotify转成ggplot对象,然后参照上面示例的代码,用shadowtext包,自己随意加图层,可以说这个功能本身也是有的,只不过不单独存在于meme中而已,所以我不用去实现它,衔接memeggplotifyshadowtext三个包,就完全可以胜任。