打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一个敲有趣的R语言拼图工具
双十一狂欢,全场五折带回家



作者简介

杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。

个人公众号:数据小魔方(微信ID:datamofang) ,“数据小魔方”创始人。 


在10月CRAN更新的R包中,发现了一个挺有意思的R包——customLayout,听名字就很神奇。

它可以用来完成自由拼图,可以使用矩阵自定义图形位置和顺序,用数字来定义每一个模块的长宽比,试用了一遍简直爱不释手,在这里分享给大家。

这个包不仅支持数字拼图,还支持R内置的base绘图对象、grid绘图对象等(也就是支持ggplot2对象)。

这样的话,对于需要制作简单仪表盘的场景,完全不必要使用rmarkdown+flexdashboard或者shiny+shinydashboard也可以快速生成仪表盘原型。

customLayout包有CRAN版本,也有github版本可供下载:

install.packages('customLayout')devtools::install_github('zzawadz/customLayout')

简单的数字拼图:

通过设置简单的数字矩阵以及对应的宽高比,可以非常方便的设置出来数字拼图:

library(customLayout)library(magrittr)lay <- lay_new(=""  mat="">1:4, ncol = 2),  widths = c(3, 2),  heights = c(2, 1))  lay_show(lay)


其中mat指定要拼图的数字矩阵,将1:4数字按照纵向顺序拼成两行,其中宽对比为3:2,高度比为2:1。

lay2 <- lay_new(="">1:4, nc = 2),  widths = c(3, 5),  heights = c(2, 4))lay_show(lay2)

参数含义同上。


cl = lay_bind_col(lay, lay2, widths = c(3, 1))lay_show(cl)


以上过程将前两个例子横向拼接,两个模块对象仍然支持设置款对比例(3:1)

lay3 <->1:2))lay4 <- lay_bind_row(cl,="" lay3,="" heights="">5, 2))lay_show(lay4)


不同层级的对象仍然支持拼接在一起。


除此之外,也可以将一个模块嵌入到两一个模块特定位置。

lay <- lay_new(="">1:4, nc = 2),  widths = c(3, 2),  heights = c(2, 1))lay_show(lay)lay2 <- lay_new(="">1:4, nc = 2),  widths = c(3, 5),  heights = c(2, 4))lay_show(lay2)slay <- lay_split_field(lay,="" lay2,="" field="">4)lay_show(slay)


这里就将lay2嵌入到lay模块的第四个区域,但may2内部的布局结构任然不变。

关于图像对象的布局与拼接:

基础绘图对象的拼接:

par(mar = c(3, 2, 2, 1))lay  <- lay_new(="">1:4, nc = 2),  widths = c(3, 2),  heights = c(2, 1))lay2 <->1:3))cl   <- lay_bind_col(lay,="" lay2,="" widths="">3, 1))lay_show(cl)
lay_set(cl) # initialize drawing areaset.seed(123)plot(1:100 + rnorm(100))plot(rnorm(100), type = 'l')hist(rnorm(500))acf(rnorm(100))pie(c(3, 4, 6), col = 2:4)pie(c(3, 2, 7), col = 2:4 + 3)pie(c(5, 4, 2), col = 2:4 + 6)


grid(ggplot2)图形对象的拼接:

library(ggplot2)library(gridExtra)lay  <- lay_new(="">1:2, ncol = 1))lay2 <->1:3))cl   <- lay_bind_col(lay,="" lay2,="" widths="">3, 1))cuts <->'cut']]),decreasing = TRUE)make_cut_plot <->function(cut) {  dd <->'cut']] == cut, ]  ggplot(dd) +      geom_point(aes(carat, price)) +      facet_wrap('cut')}plots <- lapply(cuts,="" make_cut_plot)lay_grid(plots,="">


customLayout包的版式布局思想非常简单,就是基于数值矩阵的模块化分割,同时不同层级的模块也可相互拼接,这样就可以像拼七巧板一样拼出很多奇形怪状的版式出来,甚至你使用这种版式来设计一个富有美感的超照片拼图或者海报都有可能。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【R分享|实战】地表最全R拼图教程,告别AI和PS
R语言绘图:28个实用程序包
R语言之内存管理
一个震撼的交互型3D可视化R包 - 可直接转ggplot2图为3D
R绘图笔记 | 二维散点图与统计直方图组合
R语言绘制抖动散点图
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服