请先阅读前3期
R高级|利用cowplot包拼接图片(2)巧用NULL调节距离、排版
在第3期中,我们讲了ggdraw和draw_plot命令,前者创建空画布,后者添加图层。现在,我们来详细介绍一下添加图层的命令draw_*。
0、创建图片
图片仍然使用第3期《R高级|cowplot包拼图(3):overlap》中的图A和图B。
1、draw_plot
第3期我们使用了draw_plot命令,现在我们来详细介绍一下。
画图A
ggdraw()+
draw_plot(A)
draw_plot共有8个参数
下面详细介绍一下plot参数。
plot参数可以是一个ggplot2图片,也可以是一个align_plots后的list,但是两者有区别的:ggplot2图片是可以和其它ggplot2参数合用的,但是align_plots产生的list不可以。
图A是ggplot2图片,放大y轴标题
ggdraw()+
draw_plot(A+
theme(axis.title.y = element_text(size = rel(10))))
使用align_plots后产生的list
pl<-align_plots(A)
ggdraw()+
draw_plot(pl[[1]])
单独画图是可以的,但是如果和ggplot2的其它命令一起使用,是不可以的。
pl<-align_plots(A)
ggdraw()+
draw_plot(pl[[1]]+
theme(axis.title.y = element_text(size = rel(10))))
这个时候不能画图,如果你想调节图A,需要在画图A阶段就调节好。
2、draw_label
draw_label共有12个参数
ggdraw() +
draw_plot(A)+
draw_label(label = "watermark",
colour = "#bf9f9f",
size = 100,
angle = 45)
我们看到这样就添加了“watermark”,但是水印在图片前面,我们需要把它放到图片后面,只需要先画水印,再画图即可。
ggdraw() +
draw_label(label = "watermark",
colour = "#bf9f9f",
size = 100,
angle = 45) +
draw_plot(A)
3、draw_plot_label
为draw_plot图片添加label,和draw_label有点重复,参数也全部介绍过:
ggdraw()+
draw_plot(A) +
draw_plot(B,scale = 0.22,
x=0.35,y=0.3) +
draw_plot_label(label = c('A','B'),
x=c(0.01,0.75),
y=c(1,0.95))
4、draw_figure_label
和draw_plot_label功能完全类似,并且可以直接draw_plot_label中的参数。值得一提的是position,可以等于top.left、top、top.right、bottom.left、bottom、bottom.right。
ggdraw()+
draw_plot(A) +
draw_figure_label(label = 'figure A',
position = "bottom.left") +
theme(plot.margin = unit(c(1,1,1,1),'cm'))
5、draw_text
和draw_label功能完全一样,只是draw_label一次只能添加1个label,而draw_text一次可以添加多个label
ggdraw()+
draw_plot(A) +
draw_text(text = c('figure A','is a box plot'),
x=c(0.2,0.6))
6、draw_image
如果你有本地图片需要和图片一起画出来,那么可用draw_image
draw_image共有10个参数
比如,在G盘下有1个logo.jpg图片,我们把它画在图A上
ggdraw() +
draw_image(image = 'G:/logo.jpg',
scale = 0.2,
x=0.38,
y=0.38) +
draw_plot(A)
或者使用magick包中的read_image读取图片
#读取本地图片
library(magick)
logo<-image_read('G:/logo.jpg')
#画图
ggdraw() +
draw_plot(A) +
draw_image(logo,
scale = 0.2,
x=0.38,
y=0.38)
还也可以先使用magick包中的read_image读取图片,然后使用ggplotify包中as.ggplot命令将图片转成ggplot2图片,最后连续使用draw_plot画出
#读取本地图片
library(magick)
logo<-image_read('G:/logo.jpg')
#转换为ggplot2图片
library(ggplotify)
logo.gg<-as.ggplot(logo)
#画图
ggdraw() +
draw_plot(A) +
draw_plot(logo.gg,
scale = 0.2,
x=0.38,
y=0.38)
7、draw_line
划线,主要有2个参数
将点按照顺序连接,即成为线
ggdraw() +
draw_line(
x = c(0.7, 0.3),
y = c(0.9, 0.8),
color = "#bf9f9f", size = 2
)
8、draw_grob
讲不来,不讲了
总结: