目標(biāo)
使用R拼出這樣的一張圖:

Let's start
1. 安裝 customLayout 包
install.packages("customLayout")
# or
library(devtools)
install_github("zzawadz/customLayout")
簡(jiǎn)單介紹一下 customLayout 包:
lay_new(mat, widths, heights)- mat: 數(shù)字矩陣,以1開始且連續(xù), 確定區(qū)數(shù)和排布順序
- widths、heights:確定每一區(qū)的比例
lay_show(lay)- 預(yù)覽分區(qū)
lay_bind_row(lay1, lay2, ..., heights)- 按行將兩個(gè)布局按特定比例合并,不支持合并兩個(gè)以上的布局,下同(太拉了~)
lay_bind_col(lay1, lay2, ..., widths)- 按列將兩個(gè)布局按特定比例合并
lay_split_field(lay1, lay2, field = idx)- 將lay1分割一特定部分(第idx區(qū))給lay2,即將lay2嵌入lay1的內(nèi)部
lay_set(lay)- 使用指定的布局進(jìn)行繪圖
lay_grid(grobs, lay)- 用于繪制ggplot對(duì)象,并指定布局
- grobs: 包含多個(gè)繪圖對(duì)象的list
- lay:繪圖布局
有了這些功能,基本上就可以滿足拼圖需求了。
2. 布局設(shè)計(jì)
首先根據(jù)效果圖將圖進(jìn)行分區(qū)并且編號(hào),方便制定排版方案,編號(hào)規(guī)則為從上到下,從左到右

編號(hào)之后應(yīng)該是這樣的:

然后確定排版方案:
- 分為三大部分,12、3456、7 三部分
- 其中3456部分又可以分為三小部分3、4、56
- 56又可以分為5、6兩小小部分 按此思路,總結(jié)為:

每大部分內(nèi)部按行合并,最后將三部分按列合并,并且在排列的時(shí)候注意比例。
2. 繪制布局
Step 1:繪制 lay_3456
p3 = p4 = p5 = p6 = lay_new(matrix(1))
lay56 = lay_bind_row(p5, p6, heights = c(1, 1))
lay3456 = lay_bind_col(lay_bind_col(p3, p4, widths = c(2, 4)), lay56, widths = c(6, 3))
lay_show(lay3456)

Step 2:繪制 lay_127并與lay3456合并
lay127 = lay_new(matrix(1:4, nrow = 2), heights = c(6, 3), widths = c(6, 9))
lay_show(lay127)

lay_res = lay_split_field(lay127, lay3456, field = 3)
lay_show(lay_res)

這樣布局就已經(jīng)畫好了,接下來(lái)直接填圖就行了。
使用布局畫圖
先畫個(gè)簡(jiǎn)單的快速看下效果:
pdf("customLayout1.pdf", 13, 9)
lay_set(lay_res)
plot(1:10)
plot(1:10)
plot(1:10)
plot(1:10)
plot(1:10)
plot(1:10)
plot(1:10)
dev.off()

再畫個(gè)像樣點(diǎn)的并測(cè)試能不能合并ggplot對(duì)象:
# test customLayout
library("customLayout")
library("ggplot2")
data = iris
colnames(data) = LETTERS[1:ncol(data)]
# plot lay3456
p3 = p4 = p5 = p6 = lay_new(matrix(1))
lay56 = lay_bind_row(p5, p6, heights = c(1, 1))
lay3456 = lay_bind_col(lay_bind_col(p3, p4, widths = c(2, 4)), lay56, widths = c(6, 3))
lay_show(lay3456)
# plot lay127 and lay_res
lay127 = lay_new(matrix(1:4, nrow = 2), heights = c(6, 3), widths = c(6, 9))
lay_show(lay127)
lay_res = lay_split_field(lay127, lay3456, field = 3)
lay_show(lay_res)
# fill lay
p1 <- ggplot(data, aes(A, B)) + geom_point(colour = "#dd1c77")
p2 <- ggplot(data, aes(A)) + geom_histogram(binwidth = 0.1, colour = "#dd1c77", fill= "#dd1c77")
p3 <- ggplot(data, aes(B)) + geom_density(alpha = 0.2, colour = "#dd1c77", fill = "white", size = 2)
p4 <- ggplot(data, aes(A, B, fill = C)) + geom_tile()
p5 <- ggplot(data[data[, "E"] == "setosa",], aes(y = C)) + geom_boxplot(colour = "#dd1c77", size = 2)
p6 <- ggplot(data[data[, "E"] == "versicolor",], aes(y = C)) + geom_boxplot(colour = "#dd1c77", size = 2)
p7 <- ggplot(data, aes(x = B, y = C)) + geom_line(colour = "#dd1c77", size = 2)
pdf("customLayout2.pdf", 13, 9)
plots2 = lapply(c(1:7), function(x) get(paste0("p", x)))
lay_grid(plots2, lay_res)
dev.off()

另外發(fā)現(xiàn)基礎(chǔ)包的圖和ggplot2的圖不能合并,不過(guò)一般也不會(huì)用基礎(chǔ)包來(lái)畫圖~
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
Layout
+關(guān)注
關(guān)注
15文章
422瀏覽量
75258 -
r語(yǔ)言
+關(guān)注
關(guān)注
1文章
30瀏覽量
6676
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
HarmonyOS開發(fā)實(shí)戰(zhàn):【親子拼圖游戲】
編程語(yǔ)言編寫的一個(gè)分布式益智拼圖游戲,可以兩臺(tái)設(shè)備同時(shí)開啟一局拼圖游戲,每次點(diǎn)擊九宮格內(nèi)的圖片,都會(huì)同步更新兩臺(tái)設(shè)備的圖片位置
拼圖游戲之新鳥求教老鳥
本帖最后由 yl383576734 于 2012-4-11 16:47 編輯
如何在這個(gè)拼圖游戲中,加入統(tǒng)計(jì)按鍵次數(shù)和類似排行榜一樣的東西,記錄每一次完成拼圖游戲的按鍵次數(shù),求給位大神幫忙啊
發(fā)表于 04-11 16:42
Matlab與R語(yǔ)言的區(qū)別
具在學(xué)術(shù)界發(fā)表,作者本人或者團(tuán)隊(duì)會(huì)在第一時(shí)間、甚至文章發(fā)表前就發(fā)布基于這個(gè)文章的R擴(kuò)展包,使得其幾乎總是走在學(xué)術(shù)界前沿。r語(yǔ)言和matlab區(qū)別總結(jié):1.matlab的語(yǔ)法更適合于矩陣
發(fā)表于 05-03 10:18
用JS寫一個(gè)OpenHarmony拼圖小游戲
1. 樣例效果本Demo是基于OpenHarmony3.0 LTS,使用JS語(yǔ)言編寫的拼圖小游戲。
發(fā)表于 07-27 18:24
微軟Visual Studio支持R語(yǔ)言
微軟 Visual Studio 近日宣布開始支持R語(yǔ)言,并推出免費(fèi)開源的R語(yǔ)言工具(R Tools for Visual Studio,R
發(fā)表于 10-12 11:47
?0次下載
r語(yǔ)言是什么_r語(yǔ)言基礎(chǔ)教程
R語(yǔ)言是一個(gè)開源的數(shù)據(jù)分析環(huán)境,起初是由數(shù)位統(tǒng)計(jì)學(xué)家建立起來(lái),以更好的進(jìn)行統(tǒng)計(jì)計(jì)算和繪圖,這篇wiki中包含了一些基本情況的介紹。由于R可以通過(guò)安裝擴(kuò)展包(Packages)而得到增強(qiáng)
發(fā)表于 01-05 15:03
?1.2w次閱讀
詳細(xì)介紹go語(yǔ)言中的閉包的實(shí)現(xiàn)
什么是閉包? 什么場(chǎng)景下會(huì)用閉包 ? 本文對(duì) go 語(yǔ)言中的閉包做了詳細(xì)介紹。 閉包是由函數(shù)及其相關(guān)引用環(huán)境組合而成的實(shí)體(即:閉
帶你了解go語(yǔ)言中的閉包
? 【 導(dǎo)讀】什么是閉包? 什么場(chǎng)景下會(huì)用閉包 ? 本文對(duì) go 語(yǔ)言中的閉包做了詳細(xì)介紹。 閉包是由函數(shù)及其相關(guān)引用環(huán)境組合而成的實(shí)體(即
如何用C語(yǔ)言實(shí)現(xiàn)拼圖游戲項(xiàng)目
? 這篇文章主要為大家詳細(xì)介紹了 C語(yǔ)言實(shí)現(xiàn)——《拼圖游戲項(xiàng)目》 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下! ? 游戲介紹: 對(duì)剛開始接觸拼圖的玩家而言,所謂
C語(yǔ)言+easyX帶你實(shí)現(xiàn):數(shù)字拼圖游戲!
這是一個(gè)簡(jiǎn)易的拼圖游戲,一共有 15 個(gè)數(shù)字方塊,將其一行行的排列為 1~15 即可完成。游戲會(huì)記錄下完成拼圖的時(shí)間。我想說(shuō)的是,很多時(shí)候,精彩的游戲不一定非要用圖片。將游戲的功能和手感都做好,游戲一樣好玩。所以我就做了這個(gè)拼圖
PyBadge和PyBadge LC的滑動(dòng)拼圖
電子發(fā)燒友網(wǎng)站提供《PyBadge和PyBadge LC的滑動(dòng)拼圖.zip》資料免費(fèi)下載
發(fā)表于 07-10 16:38
?0次下載
R語(yǔ)言-customLayout-包拼圖
評(píng)論