对于生信技能树的生信入门课班的学员,我们有两个专门的答疑专辑,里面收录了每一位学员的各种疑难杂症,每一位学员的问题我们都超认真对待,给予无微不至的解答:《生信马拉松答疑》,《马拉松授课互动答疑》, 欢迎各位点进去观看。
此外,最新一期生信入门就在5月5号开课,还没上车的可以看一看瞄一瞄:生信入门&数据挖掘线上直播课5月班,完全适合0基础小白。
下面来看看最近一位学员遇到的问题,他是一个绘图的问题:

起初我以为就是个简单的拼图呢,然后设置一下图片拼接的高度和宽度就可以了!
学员把他的结果发过来我才发现不是这样的!
下面来看看吧~
拼图问题重现
拿到学员发来的数据和代码(已获得学员准许图片打码发公众号),拼图方式如下:
# install.packages("magick")
library(magick)
library(pdftools)
library(cowplot)
library(ggplot2)
library(patchwork)
pdf_convert("barplot1.pdf", format = "png", pages = 1, dpi = 300)
pdf_convert("barplot.pdf", format = "png", pages = 1, dpi = 300)
img1 <- image_read("barplot1_1.png")
p1 <- ggdraw() + draw_image(img1)
p1
class(p1)
pdf_convert("vioplot1.pdf", format = "png", pages = 1, dpi = 300)
pdf_convert("vioplot.pdf", format = "png", pages = 1, dpi = 300)
img3 <- image_read("vioplot1_1.png")
p3 <- ggdraw() + draw_image(img3)
p3
p <- p1 / p3
p
结果如下:

完美重现了学员的问题!
一开始我想不明白这两个图为啥要用已经生成好的pdf转成png然后读取进来再拼图呢?
详细询问看了其他的代码才知道,这两个图都是基础函数绘制保存pdf,难怪呢!走了弯路呀!
解决方案
我尝试解决的过程中,尝试了不少的参数,尤其是 patchwork 拼图的时候的height, width, 以及转为ggplot2后的theme主题发现都没有什么用,
后面发现第一个问题是图片在窗口里面显示的时候不对齐,但是只要保存出去,在文件里面看效果不一样:
ggsave(file="tset.pdf", width = 6.7,height = 8)

接下来我又看了看这个代码的其他参数,然后调整如下:
draw_image
这个函数里面的 scale = 1,width = 1.08, halign=0
是关键,
- width = 1.08:图片横向拉伸和压缩的效果
- ggsave:这个函数的width, height 调整到一个合适的比例
img1 <- image_read("barplot1_1.png")
p1 <- ggdraw() + draw_image(img1,scale = 1,width = 1.08,halign=0)
p1 <- ggplotify::as.ggplot(p1)
img3 <- image_read("vioplot1_1.png")
p3 <- ggdraw() + draw_image(img3,width = 0.95,halign=0)
p3 <- ggplotify::as.ggplot(p3)
p <- wrap_plots(p1, p3, ncol = 1, heights = c(1,1)) + # 两行一列
plot_annotation(tag_levels = 'A')
ggsave(file="tset.pdf", width = 6.7,height = 8)
最终效果如下:

完美!
还有其他的解决办法吗?
当然,这个问题其实最快的就是在AI里面调整,因为都是pdf文件,对齐就不在话下啦!
这种情况我推荐AI~
如果你也有生信分析上的疑问但是不知道问谁,看看我们的入门培训班吧:生信入门&数据挖掘线上直播课5月班
我们每一期学员的学习反馈:《生信故事会》
两娃宝妈:千里奔赴来重庆相聚线下参加生信学习班的原因
从小白到成功发表生信相关的论文
破冰前行:一位生信学者的年度学习心得与感悟
异地夫妻职场妈妈的生信梦
如果可以早一点邂逅生信技能树
还有很多点击上面的专辑进去看看吧~