一个敲有趣的R语言拼图工具

简介:

在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 = matrix(1:4, ncol = 2),
widths = c(3, 2),
heights = c(2, 1))
lay_show(lay)
82f2477dee889c53e5563634831eb283a68b9d30

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


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

参数含义同上。

a96bd250adec93069dcff854e7f842f0136237b6


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

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


lay3 <- lay_new(matrix(1:2))
lay4 <- lay_bind_row(cl, lay3, heights = c(5, 2))
lay_show(lay4)
1c7df5ad49518e10cb0a22c389b07c6d66e24bee

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

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


lay <- lay_new(
matrix(1:4, nc = 2),
widths = c(3, 2),
heights = c(2, 1))
lay_show(lay)
lay2 <- lay_new(
matrix(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)
8a8786c46f451cff3a05bf384423748633392f5f

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

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

基础绘图对象的拼接:


par(mar = c(3, 2, 2, 1))
lay <- lay_new(
matrix(1:4, nc = 2),
widths = c(3, 2),
heights = c(2, 1))
lay2 <- lay_new(matrix(1:3))
cl <- lay_bind_col(lay, lay2, widths = c(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)
f6e5c1d1854d71d4ab3e01f75917b3d6ae49ffb6

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


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

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


原文发布时间为:2018-11-4

本文作者:杜雨

本文来自云栖社区合作伙伴“数据小魔方”,了解相关信息可以关注“数据小魔方”。

相关文章
|
19天前
|
人工智能 数据可视化 机器人
【Python】Python实现五子棋游戏(带可视化界面)【独一无二】
【Python】Python实现五子棋游戏(带可视化界面)【独一无二】
|
7月前
|
Python
python脚本的超级玛丽
python脚本的超级玛丽
81 2
|
数据可视化 Python
神操作!用 Python 操作 xmind 绘制思维导图!
在平时的工作中当我们要总结一些知识的时候就需要一款工具来画画流程图,这里推荐 XMind 软件,用 Xmind 绘制的思维导图看起来思路清晰,那么今天的文章介绍关于思维导图的相关知识以及用 Python 如何操作 Xmind 绘制思维导图。
1281 0
神操作!用 Python 操作 xmind 绘制思维导图!
|
9月前
|
数据可视化 Python
Python版 孤勇者 | 画图+演奏+音乐可视化
另外还有个叫做 pgzero 的游戏开发库,里面有一个可以播放音符的方法。
Python版 孤勇者 | 画图+演奏+音乐可视化
|
11月前
|
XML 前端开发 JavaScript
没有一个顺手的流程绘制工具?好吧,自己动手,丰衣足食
没有一个顺手的流程绘制工具?好吧,自己动手,丰衣足食
|
11月前
|
数据可视化 JavaScript 前端开发
【Mermaid】画图工具使用笔记
【Mermaid】画图工具使用笔记
138 0
|
11月前
|
机器学习/深度学习 程序员 API
这篇罕见的符号编程论文,让你在Jupyter Notebook中手绘草图并变成代码
这篇罕见的符号编程论文,让你在Jupyter Notebook中手绘草图并变成代码
|
Python
python小游戏———拼图代码开源
python小游戏———拼图代码开源
198 0
|
数据可视化 测试技术 Python
软件测试|神操作!用 Python 操作 xmind 绘制思维导图
软件测试|神操作!用 Python 操作 xmind 绘制思维导图
193 0
软件测试|神操作!用 Python 操作 xmind 绘制思维导图
|
数据可视化 JavaScript API
CuteCharts一个敲可爱的 Python 手绘风格可视化图表库
CuteCharts一个敲可爱的 Python 手绘风格可视化图表库
CuteCharts一个敲可爱的 Python 手绘风格可视化图表库