网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

R语言-customLayout-包拼图

时间:2023-05-19 17:23

人气:

作者:admin

标签: 包拼图  语言 

导读:mat: 数字矩阵,以1开始且连续, 确定区数和排布顺序...

目标

使用R拼出这样的一张图:

图片

Let's start

1. 安装 customLayout

install.packages("customLayout")

# or
library(devtools)
install_github("zzawadz/customLayout")

简单介绍一下 customLayout 包:

  • lay_new(mat, widths, heights)
    • mat: 数字矩阵,以1开始且连续, 确定区数和排布顺序
    • widths、heights:确定每一区的比例
  • lay_show(lay)
    • 预览分区
  • lay_bind_row(lay1, lay2, ..., heights)
    • 按行将两个布局按特定比例合并,不支持合并两个以上的布局,下同(太拉了~)
  • lay_bind_col(lay1, lay2, ..., widths)
    • 按列将两个布局按特定比例合并
  • lay_split_field(lay1, lay2, field = idx)
    • 将lay1分割一特定部分(第idx区)给lay2,即将lay2嵌入lay1的内部
  • lay_set(lay)
    • 使用指定的布局进行绘图
  • lay_grid(grobs, lay)
    • 用于绘制ggplot对象,并指定布局
    • grobs: 包含多个绘图对象的list
    • lay:绘图布局

有了这些功能,基本上就可以满足拼图需求了。

2. 布局设计

首先根据效果图将图进行分区并且编号,方便制定排版方案,编号规则为从上到下,从左到右

图片

编号之后应该是这样的:

图片

然后确定排版方案:

  • 分为三大部分,12、3456、7 三部分
  • 其中3456部分又可以分为三小部分3、4、56
  • 56又可以分为5、6两小小部分 按此思路,总结为:图片

每大部分内部按行合并,最后将三部分按列合并,并且在排列的时候注意比例。

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)

图片

这样布局就已经画好了,接下来直接填图就行了。

使用布局画图

先画个简单的快速看下效果:

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()

图片

再画个像样点的并测试能不能合并ggplot对象:

# 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()

图片

另外发现基础包的图和ggplot2的图不能合并,不过一般也不会用基础包来画图~

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信