下面来看看最近一位学员遇到的问题,他是一个绘图的问题:
起初我以为就是个简单的拼图呢,然后设置一下图片拼接的高度和宽度就可以了!
学员把他的结果发过来我才发现不是这样的!
下面来看看吧~
拿到学员发来的数据和代码(已获得学员准许图片打码发公众号),拼图方式如下:
# 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
是关键,
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文件,对齐就不在话下啦!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有