ggplot2的首席专家Thomas Lin Pedersen发布了patchwork这个包,专业拼图简单好用。 patchwork官方地址 参考刘小泽 一直深受ggplot2的拼图所困扰,每次需要导出图片在PS或AI里面拼图。有了patchwork可以直接在R里面拼图了。 功能: 1. 拼合多张图 2. 添加ABCD或I II III 3. 同时修改多张图的图注位置 优点:代码简单,易学易懂,完美承接ggplot2.
安装
#CRAN安装稳定版
install.packages("patchwork")
#github安装开发版。二选一即可。
install.packages("devtools")
devtools::install_github("thomasp85/patchwork")
用法示例:
##用以测试patchwork包
##主要是用来拼合多个图片的
setwd("E:/Rcode")
library(ggplot2)
install.packages("patchwork")
library(patchwork)
p1 <- ggplot(mtcars)+geom_point(aes(mpg,disp))
p2 <- ggplot(mtcars)+geom_boxplot(aes(gear,disp,group=gear))
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))
+
表示横向排列,/
表示纵向排列,一次可以有多个+ /
组成公式
p1+p2
p1/p2
p1+p2/p3+p4
p2+(p1/p3)+p4
-
表示两个图放置在一个嵌套层
p1-p2
通过ncol指定绘图的列数,或者是nrow指定绘图的行数
当有多个图的时候,如果指定的列或行比图的实际数量少,则会压缩对应的图的宽度或长度
p4+p1+p2+plot_layout(ncol = 2)
p1+p3+p4/p2+plot_layout(nrow=2) #会压缩p4和p2的高度
可以用plot_spacer()添加一个空白图占位置
p1+plot_spacer()+p2
布局可以使用ABCD来表示
layout2 <- 'AAB
CDD'
p1+p2+p3+p4+plot_layout(design = layout2)
![p1+p2+p3+p4+plot_layout(design = layout2) ](https://upload-images.jianshu.io/upload_images/18151951-5affc054cdb9c8d0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
给图添加图注字母
p1+p2+p3+p4+plot_annotation(tag_levels = 'I')
p1+p2/p3+p4+plot_annotation(tag_levels = 'A')
多重标注,先给p4|p2添加,再给p1添加。A1,A2和B
((p4 | p2) + plot_layout(tag_level = 'new'))/p1+plot_annotation(tag_levels = c('A', '1'))
同时添加多个标题
(p1+p2/p3+p4)+plot_layout(guides = 'collect')+plot_annotation(title="test layout for patchwork",caption = 'this is the caption',theme = theme(plot.caption = element_text(size=15)))
同时修改多个图的theme
(p1+p2/p4)*theme_void()
注意*号只能修改当前嵌套层,现在是只修改了p1图层,删除背景颜色
(p1+p2/p4)&theme_bw()+theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())
&是同时删除背景颜色和网格线 操作对象是所有图层
(p4-p1/p3)*(theme_bw()+ theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank()))
只操作了P4图层,删掉背景色和网格线
注意操作符号:
-
是把多个图层合成一个嵌套层,+
是把后面的层,添加到前面的层,|
和/
分别表示横向排布和纵向排布。*
只操作一个嵌套层,&
操作所有的层。
cowplot包的使用(基于ggplot2的拼图包,快速方便)
#### cowplot包拼图
library(ggplot2)
library(cowplot)
setwd("E:/R/cowplot/")
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) +
geom_point(size=2.5)+theme_classic()
plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() +
theme(axis.text.x = element_text(angle=70, vjust=0.5))+theme_classic()+scale_y_continuous(expand = c(0,0))
##插入空值,占据位置
plot_grid(plot.mpg,NULL,NULL,plot.diamonds,labels=c("A", "NULL","NULL","B"),ncol = 2)
plot2by2 <- plot_grid(plot.mpg,NULL,NULL,plot.diamonds,labels=c("A", "NULL","NULL","B"),ncol = 2)
plot2by2
##保存图片
save_plot("plot2by2.png", plot2by2,
ncol = 2, # we're saving a grid plot of 2 columns
#nrow = 2, # and 2 rows
# each individual subplot should have an aspect ratio of 1.3
base_aspect_ratio = 1.3
)
#添加水印标注版权
ggdraw(plot.mpg) +
#draw_plot_label("A", size = 14) + #添加标签A
draw_label("Warning!", angle = -45, size = 100, alpha = .2,color = "red") #设置水印的旋转角度,大小,透明度,颜色。
使用magick可以读取本地和网络的图片、视频,同时可以编辑图片
#install.packages("magick")
library(ggplot2)
library(magick)
#查看magick支持的图片的种类
str(magick::magick_config())
p <- ggplot(iris, aes(x=Sepal.Length, fill=Species)) + geom_density(alpha = 0.5)+theme_classic()
p2 <- ggdraw()+draw_image("http://jeroen.github.io/images/tiger.svg",scale = .75)
p3 <- ggdraw()+draw_image("./model.png",scale = .8)
plot_grid(p,p2,p3,labels = "AUTO")
ggsave("test_magick.png",width = 170,height = 230,units = "mm",dpi = 300)
tiger <- image_read("http://jeroen.github.io/images/tiger.svg")
sun <- image_read("./model.png")
img <- c(tiger,sun)
img <- image_scale(img, "300x300")
image_info(img)
##magick的OCR识别功能测试(默认识别为英语,其他语言需要安装对应的数据库)
#install.packages("tesseract")
library(tesseract)
img2txt <- function(in_img,out_txt){
tri_3 <- image_read(in_img)
image_ocr <- image_ocr(tri_3)
cat(image_ocr)
write(image_ocr,out_txt)
}
img2txt("./eng.png","model.txt")
左侧是ggplot2画的,右侧是网络图片,c是本地图片,合并到一张图上。