简介
今日内容比较“无用”,觉得比较好玩,所以就做一期“异类”可视化啦!主要介绍下 brickr[1] 包,它将乐高(LEGO) 带入 R 和 tidyverse 生态系统中,该包分为2个部分:
- Mosaics(马赛克)[2]:将图像转换为乐高积木的马赛克图像。
- 3D 模型[3]:使用 rgl 包,通过数据表构建 3D 乐高模型。
今天这一期主要介绍第一个部分:
马赛克
首先读取 PNG 或 JPEG 图像,然后使用 image_to_mosaic
和 build_mosaic
函数 构建成乐高版本的马赛克图。下面给出一个官方的例子:
# install.packages("brickr") library(brickr) # install.packages("png") library(png) # 图像获取 img <- tempfile() download.file("https://r-charts.com/images/favicon.png", img, mode = "wb") # 创建LEGO版本的mosaic图 readPNG(img) %>% image_to_mosaic() %>% build_mosaic()
如果未安装该包,可使用
install.packages("brickr")
进行安装。这里readPNG()
来自png
包,记得也要提前安装。
这里是先建立一个临时文件 img
,然后将网上的一张图下载下来,并存储到 img
中。之后读取图像和转化为马赛克数据,最后构建成马赛克图。
当然,如果你可以加载本地的图像,例如,小编将自己公众号的头像进行上传演示:
readPNG("avatar.png") %>% image_to_mosaic() %>% build_mosaic()
得到的图形如下:
image_to_mosaic()
内部包含了一些重要的参数,详细介绍可见 ?image_to_mosaic()
。这里主要修改 img_size
参数来调整图片尺寸,当是一个值时,表示创建一个正方形图像,如果是两个值c(56,48)
则表示创建长为 56,宽为48的长方形图像。数值越大,像素越高,乐高版本的马赛克越密集,例如当img_size = 120
时,得到的结果:
感觉拿来当头像也很好呀!如果想通过该功能制作头像,记得背景最好纯色,这样效果更佳。如果照片不是 png 格式,可以通过这个网站[4]转化为 png 格式,再导入。
介绍构建过程
你可以使用 build_instructions
介绍你这个图构建的过程,默认是 6 步骤,例如官网例子:
library(brickr) library(png) # Get the image img <- tempfile() download.file("https://r-charts.com/images/favicon.png", img, mode = "wb") # Create the LEGO instructions readPNG(img) %>% image_to_mosaic() %>% build_instructions()
我将其应用到推文:R可视乎|用R给心仪的对象表白吧 图形,这时得到的表白爱心构建步骤如下:
是不是还挺 Romantic 的👻
使用乐高的材料
你可以通过 build_pieces
函数,告诉大家这个图使用了哪些颜色,形状的乐高材料。例如,官网例子:
library(brickr) library(png) # Get the image img <- tempfile() download.file("https://r-charts.com/images/favicon.png", img, mode = "wb") # List of LEGO pieces readPNG(img) %>% image_to_mosaic() %>% build_pieces()
小编有话说
- 今天主要介绍 brickr 包一部分功能,主要是讲了三个函数的使用以及解释得到图片的结果,具体可见这篇教程[5]。
- 小编觉得这个包确实很有趣,你可以将自己的头像上传转化成马赛克图作为头像,这不挺酷的吗?哈哈。
- 下一期会介绍这个包的另一个功能,搭三维的马赛克图!
参考资料
[1]
brickr: http://brickr.org/index.html
[2]
Mosaics(马赛克): http://brickr.org/index.html#mosaics
[3]
3D模型:http://brickr.org/index.html#3d-models
[4]
[5]