我在*.Rmd
文件中使用以下代码生成以下输出:
```{r gb, echo=F, eval=T, results='asis', cache.rebuild=T, fig.cap='bla', out.width='0.7\\linewidth', fig.subcap=c('bla.', 'Using the \\textit{normalizeChIPToInput} function. THis method doesn not require to compute a enrichment ratio.')}
p1 <- file.path(FIGDIR, 'correlK27K9me3.png')
p2 <- file.path(FIGDIR, 'correlK27K9me3.png')
knitr::include_graphics(c(p1,p2))
```
我想垂直堆叠这两个图而不是并排显示它们而没有单独调用include_graphics
(这不适用于子标题)而不必放置它们进入单独的chuncks。如果不操纵乳胶代码,这可能吗?
更一般地说,是否有可能以某种方式指定上述方式中包含的绘图的布局,例如:'为我提供给include_graphics
函数的4个图像给我一个2x2的网格?
答案 0 :(得分:1)
而不是:
knitr::include_graphics(c(p1,p2))
这个怎么样:
cowplot::plot_grid(p1, p2, labels = "AUTO", ncol = 1, align = 'v')
这可以在{r}
内部使用,但我不知道如果你的chunk config / setup会如何工作。
答案 1 :(得分:1)
这不是问题最巧妙的解决方案,而是使用R中的gridarrange
和text
函数进行一些解决方法。
处理流程:read_images - &gt;转换为网格 - &gt;读取网格图像 - &gt; add_text - &gt; final_save
```{r fig.align='center', echo=FALSE, fig.cap="Figure 1 : foo", warning=FALSE, message=FALSE}
library(png)
library(grid)
library(gridExtra)
#Loading images
img0 <- readPNG("heatMap.png")
img1 <- readPNG("heatMap.png")
img2 <- readPNG("heatMap.png")
img3 <- readPNG("heatMap.png")
#Convert images to Grob (graphical objects)
grob0 <- rasterGrob(img0)
grob1 <- rasterGrob(img1)
grob2 <- rasterGrob(img2)
grob3 <- rasterGrob(img3)
png(filename = "gridPlot.png", width = 1200, height = 716)
grid.arrange(grob0, grob1, grob2, grob3, nrow = 2)
invisible(dev.off())
gridplot.0 <- readPNG("gridPlot.png")
h<-dim(gridplot.0)[1]
w<-dim(gridplot.0)[2]
png(filename = "gridPlotFinal.png", width = 1200, height = 716)
#adding text to image (refer to https://stackoverflow.com/a/23816416/6779509)
par(mar=c(0,0,0,0), xpd=NA, mgp=c(0,0,0), oma=c(0,0,0,0), ann=F)
plot.new()
plot.window(0:1, 0:1)
#fill plot with image
usr<-par("usr")
rasterImage(gridplot.0, usr[1], usr[3], usr[2], usr[4])
#add text
text("plot1", x=0.25, y=0.50)
text("plot2", x=0.75, y=0.50)
text("plot3", x=0.23, y=0.0)
text("plot4", x=0.77, y=0.0)
invisible(dev.off())
gridplot <- file.path("gridPlotFinal.png")
knitr::include_graphics(gridplot)
```