admin管理员组

文章数量:1437378

patchwork拼图对不齐怎么办?

下面来看看最近一位学员遇到的问题,他是一个绘图的问题:

起初我以为就是个简单的拼图呢,然后设置一下图片拼接的高度和宽度就可以了!

学员把他的结果发过来我才发现不是这样的!

下面来看看吧~

拼图问题重现

拿到学员发来的数据和代码(已获得学员准许图片打码发公众号),拼图方式如下:

代码语言:javascript代码运行次数: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主题发现都没有什么用,

后面发现第一个问题是图片在窗口里面显示的时候不对齐,但是只要保存出去,在文件里面看效果不一样

代码语言:javascript代码运行次数:0运行复制
ggsave(file="tset.pdf", width = 6.7,height = 8)

接下来我又看了看这个代码的其他参数,然后调整如下

draw_image 这个函数里面的 scale = 1,width = 1.08, halign=0 是关键,

  • scale:图片缩放,大于1就会具有放大镜的效果
  • width = 1.08:图片横向拉伸和压缩的效果
  • halign:图片读取进来靠水平左边对齐
  • ggsave:这个函数的width, height 调整到一个合适的比例
代码语言:javascript代码运行次数:0运行复制
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文件,对齐就不在话下啦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-26,如有侵权请联系 cloudcommunity@tencent 删除函数压缩imagepdfpng

本文标签: patchwork拼图对不齐怎么办